Here are some open tickets I created to support expressions as json compatible strings for my flight ticket.
https://github.com/apache/arrow/issues/43858 schema support https://github.com/apache/arrow/issues/39128 Expression support I have a ticket for sqlglot to support sql operations using json compatible strings as well. ________________________________ From: Lee, David (ITE) <david....@blackrock.com.INVALID> Sent: Saturday, March 29, 2025 7:12:47 AM To: dev@arrow.apache.org <dev@arrow.apache.org> Subject: Re: [DISCUSS] Arrow Flight Predicate Pushdown This is hacky but I just use json as my flight ticket like a body for a http request post call. The json includes the data request and optional compute/filtering that needs to be performed. The server applies the compute/filtering using sql or pyarrow compute depending on the data source. ________________________________ From: David Li <lidav...@apache.org> Sent: Friday, March 28, 2025 5:07:24 AM To: dev@arrow.apache.org <dev@arrow.apache.org> Subject: Re: [DISCUSS] Arrow Flight Predicate Pushdown External Email: Use caution with links and attachments There is no real interoperability between Flight services, precisely because CMD is entirely user-defined. And unfortunately Flight forces everyone into sharing one service definition in order to accomplish it. (I mean, you could establish some way to define and distribute the structure of the requests/responses, but then you're just reinventing Protobuf+gRPC/OpenAPI, but badly and with no community.) > There may not be a secret sauce but there is the ease of > implementation/deployment of having everything in a single service. Being > able to write a Flight server following the cookbooks in different > languages is very beneficial. *It is great actually. * The problem is that it puts us as Arrow developers in a weird spot of effectively being level 1 tech support for Google (gRPC/Protobuf), which is also an unpaid position for a multi billion dollar company. Also I think it "scales up" badly: once you do want to use any gRPC feature that we didn't have the foresight to expose, you're stuck. (Not entirely stuck, if in Go or Java, but it certainly borks Flight SQL's design enough to be painful.) > Operating multiple gRPC services in the same processes in Python doesn't > seem to be possible due to how gRPC is wrapped by Arrow Flight. Yes, that's another implementation mistake unfortunately. I don't consider it as a reason to ditch Flight/gRPC entirely, though, just that the implementation in C++ specifically has a lot of downsides. Python service developers are certainly stuck in a rough spot, though. On Fri, Mar 28, 2025, at 18:28, Rusty Conover wrote: > On Thu, Mar 27, 2025 at 12:01 PM David Li <lidav...@apache.org> wrote: > >> It's not clear to me why (4) doesn't work. Can you speak more about the >> flow of requests here? Putting a ticket inside a FlightDescriptor makes me >> think something more complicated is going on. >> > > I made a mistake in my description of method 4, I meant FlightDescriptor > rather than "ticket". I apologize. > > Method 4 would be the creation of a new FlightDescriptor that is of the CMD > type, with the original FlightDescriptor along with the predicate > information serialized in some format understandable to the server. > > While technically any of these methods could work, I'm trying to achieve a > solution that could yield the most interoperability with other Flight > servers. It seems that this may not be important as the existing ecosystem > of Flight servers don't have consistency beyond the gRPC spec. Or there > really isn't a public ecosystem to speak of? > > If there isn't really an ecosystem or a desire to foster one I'm happy to > just make a decision, send some type of "Flight client protocol" version > header so clients/servers can determine the choices made, and move forward > with implementation. > > >> Alternatively...just create your own gRPC service, and return whatever >> payload you need. There's no need to bend Flight to do something it wasn't >> designed to do, and apart from the Arrow/Protobuf/gRPC integrations in the >> data-carrying methods, there's no secret sauce in Flight anyways. >> > > > There may not be a secret sauce but there is the ease of > implementation/deployment of having everything in a single service. Being > able to write a Flight server following the cookbooks in different > languages is very beneficial. *It is great actually. * > > Operating multiple gRPC services in the same processes in Python doesn't > seem to be possible due to how gRPC is wrapped by Arrow Flight. > > As an aside, could "Arrow Flight: The Good Parts" be summarized as: > > * DoGet, DoExchange, DoPut, and DoAction. > * FlightDescriptor/FlightEndpoint are both reasonable types to use, but > FlightInfo should be avoided. > * Authentication is a call to DoAction and gRPC headers. > > Best, > > Rusty This message may contain information that is confidential or privileged. If you are not the intended recipient, please advise the sender immediately and delete this message. See https://nam10.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.blackrock.com%2Fcorporate%2Fcompliance%2Femail-disclaimers&data=05%7C02%7CDavid.Lee%40blackrock.com%7C6e8f03aa288142ed679508dd6ecbfba9%7C282a32955c424d939ec16631001cc5f7%7C0%7C0%7C638788544557665790%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=IhWzG9jPPhpOw42dfFk7at1bOoXeWWifDdoL6J6R2e0%3D&reserved=0<http://www.blackrock.com/corporate/compliance/email-disclaimers> for further information. Please refer to https://nam10.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.blackrock.com%2Fcorporate%2Fcompliance%2Fprivacy-policy&data=05%7C02%7CDavid.Lee%40blackrock.com%7C6e8f03aa288142ed679508dd6ecbfba9%7C282a32955c424d939ec16631001cc5f7%7C0%7C0%7C638788544557683288%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=d4nQV3jn%2Fb5cZXc99Gw34DpDIWkkXbNIB22FJzdlpHI%3D&reserved=0<http://www.blackrock.com/corporate/compliance/privacy-policy> for more information about BlackRock’s Privacy Policy. For a list of BlackRock's office addresses worldwide, see https://nam10.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.blackrock.com%2Fcorporate%2Fabout-us%2Fcontacts-locations&data=05%7C02%7CDavid.Lee%40blackrock.com%7C6e8f03aa288142ed679508dd6ecbfba9%7C282a32955c424d939ec16631001cc5f7%7C0%7C0%7C638788544557697394%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=sWxRV9JF3bJt2fWLt%2ByDg0I0%2Fjk6NCjw2rVCTUBR70g%3D&reserved=0<http://www.blackrock.com/corporate/about-us/contacts-locations> . © 2025 BlackRock, Inc. All rights reserved. This message may contain information that is confidential or privileged. If you are not the intended recipient, please advise the sender immediately and delete this message. See http://www.blackrock.com/corporate/compliance/email-disclaimers for further information. Please refer to http://www.blackrock.com/corporate/compliance/privacy-policy for more information about BlackRock’s Privacy Policy. For a list of BlackRock's office addresses worldwide, see http://www.blackrock.com/corporate/about-us/contacts-locations. © 2025 BlackRock, Inc. All rights reserved.