So I made some progress with updated code:

        t = ibis.table([("a", "int64"), ("b", "int64")], name="table0")

        test_table_0 = pa.Table.from_pydict({"a": [1, 2, 3], "b": [4, 5,
6]})



        result = translate(t, self.compiler)



        def table_provider(names):

            if not names:

                raise Exception("No names provided")

            elif names[0] == 'table0':

                return test_table_0

            else:

                raise Exception(f"Unknown table name {names}")



        print(result)

        result_buf =
pa._substrait._parse_json_plan(tobytes(MessageToJson(result)))



        pa.substrait.run_query(result_buf, table_provider)

I think now the plan is passed properly and I got a "ArrowInvalid: Empty
substrait plan is passed"


Looking the plan reproduces by ibis-substrait, it looks like doesn't match
the expected format of Acero consumer. In particular, it looks like the
plan produced by ibis-substrait doesn't have a "relations" entry - any
thoughts on how this can be fixed? (I don't know if I am using the API
wrong or some format inconsistency between the two)

On Tue, Oct 4, 2022 at 1:54 PM Li Jin <ice.xell...@gmail.com> wrote:

> Hi,
>
> I am testing integration between ibis-substrait and Acero but hit a
> segmentation fault. I think this might be cause the way I am
> integrating these two libraries are wrong, here is my code:
>
> Li Jin
> 1:51 PM (1 minute ago)
> to me
>
> class BasicTests(unittest.TestCase):
>
>     """Test basic features"""
>
>
>
>
>
>     @classmethod
>
>     def setUpClass(cls):
>
>         cls.compiler = SubstraitCompiler()
>
>
>
>     def test_named_table(self):
>
>         """Test basic"""
>
>         t = ibis.table([("a", "int64"), ("b", "int64")], name="table0")
>
>         result = translate(t, self.compiler)
>
>
>
>         def table_provider(names):
>
>             if not names:
>
>                 raise Exception("No names provided")
>
>             elif names[0] == 'table0':
>
>                 return test_table_0
>
>             else:
>
>                 raise Exception(f"Unknown table name {names}")
>
>
>
>         test_table_0 = pa.Table.from_pydict({"a": [1, 2, 3], "b": [4, 5,
> 6]})
>
>
>
>         print(type(result))
>
>         print(result)
>
>         result_bytes = result.SerializeToString()
>
>
>
>         pa.substrait.run_query(result_bytes, table_provider)
>
>
> I wonder if someone has tried integration between these two before and can
> share some working code?
>

Reply via email to