So "Flight" and "Flight SQL" are distinct projects. Flight defines RPC methods, and "Flight SQL" defines higher-level methods on top of the Flight methods. The optimization proposed is for Flight. Once/if that gets accepted and implemented, Flight SQL servers could then use it to optimize GetCatalogs: they would return a FlightInfo that has the data embedded. So yes, all the methods should get support for this once things get worked out.
On Mon, Mar 7, 2022, at 10:57, Gavin Ray wrote: > Sure, will use that JIRA issue for whatever thoughts/feedback =) > > On that note, filed the above bug here: > https://issues.apache.org/jira/browse/ARROW-15861 > > About the "two-step" thing, I guess what I mean is code like this > where you make the initial op, then get the stream: > > val catalogs: FlightInfo = client.getCatalogs() > val stream: FlightStream = > client.getStream(catalogs.endpoints[0].ticket) > while (stream.next()) { > stream.root.use { root -> println(root.contentToTSVString()) } > } > > You override two methods, "getFlightInfoCatalogs" and then > "getStreamCatalogs" > Maybe I misunderstood -- can you just return the data directly from IE > "getFlightInfoCatalogs" > > Ideally I'd love to be able to do something like: > > val catalogs = client.getCatalogs() > for (catalog in catalogs.rows) {} > > But maybe this is not really feasible/practical with how Arrow works as a > format or the architecture of Flight > > And RE: the JS implementation, TypeScript is my primary language so I'd > love to be useful there if I could =) > It's also much faster to prototype stuff in JS/TS due to lack of > compilation. > > On Mon, Mar 7, 2022 at 10:46 AM David Li <lidav...@apache.org> wrote: > >> (responses inline) >> >> On Mon, Mar 7, 2022, at 10:37, Gavin Ray wrote: >> >> >> >> Another contributor is currently working on some Java >> >> tutorials/documentation so any feedback would be helpful. >> > >> > >> > Ah, yeah this would be incredibly useful. Will compile some thoughts, >> where >> > should I share them? >> > Didn't know about the Cookbook, definitely going to be tonight's reading! >> > >> >> Would you mind putting them on the overall Jira? >> https://issues.apache.org/jira/browse/ARROW-15156 >> >> If there's questions about the cookbook, or tasks where it's not clear how >> to accomplish them, you can file issues directly on the cookbook repo too. >> >> > >> > Ah, I suppose having the small-value optimization would mostly cover your >> >> needs then? And then grpc-web or a similar bridge should suffice for >> you. >> > >> > >> > Yeah 100% >> > Wanted to ask a question on this -- is there a possibility to add the >> > "one-shot" single message RPC s for all operations? >> > >> > In my case it's mostly extra-overhead to send the first ticket, get a >> > statement handle, and then make a second call which streams the results >> > Would be awesome to have the ability to opt-in to one-shot messages for >> > both Metadata and Query operations >> >> Hmm, which other operations are you looking at? For instance, GetSchema >> takes a FlightDescriptor directly. It's really just DoGet that has that >> two-step structure. >> >> > >> > If you have details about the dependency issue, do you mind filing a Jira >> >> issue? >> >> Seems something might have changed and we should be prepared to fix it. >> >> (Flight/Java does a lot of poking at internal APIs to try to avoid >> copies.) >> > >> > >> > Absolutely, no problem. I'll revert my dep override and file an issue >> with >> > the stacktrace. >> >> Thanks! >> >> > --- >> > On a side note, I've started work on a Node.js implementation of Flight + >> > FlightSQL in the Arrow repo. >> > Never worked with gRPC but hopefully I can get the majority of the work >> > finished and file a draft PR =) >> >> That will be interesting to see. I believe the Arrow JS implementation >> could use some more attention in general. >> >> > >> > https://gist.github.com/GavinRay97/876c8e8476b18c8eb01cb6e8f807bf28 >> > >> > On Mon, Mar 7, 2022 at 9:55 AM David Li <lidav...@apache.org> wrote: >> > >> >> Cool - if you have API questions, feel free to send them here or >> >> u...@arrow.apache.org. Another contributor is currently working on some >> >> Java tutorials/documentation so any feedback would be helpful. There's >> also >> >> some basic recipes here: https://github.com/apache/arrow-cookbook/ >> >> >> >> Ah, I suppose having the small-value optimization would mostly cover >> your >> >> needs then? And then grpc-web or a similar bridge should suffice for >> you. >> >> >> >> If you have details about the dependency issue, do you mind filing a >> Jira >> >> issue? Seems something might have changed and we should be prepared to >> fix >> >> it. (Flight/Java does a lot of poking at internal APIs to try to avoid >> >> copies.) >> >> >> >> Thanks, >> >> David >> >> >> >> On Mon, Mar 7, 2022, at 09:48, Gavin Ray wrote: >> >> > Ah brilliant! Yeah, Websockets (or anything that's a basic transport >> and >> >> > doesn't require a language-specific SDK) would be fantastic. >> >> > >> >> > In my case, streaming wouldn't be a requirement, at least not for some >> >> time >> >> > (more of a nice-to-have). >> >> > It'd be mostly OLTP-style workloads, with small response sizes >> >> (10-1,000kB). >> >> > >> >> > By the way -- wanted to thank yourself and the others from the mailing >> >> list >> >> > for all the help. >> >> > Last night I was able to get a basic FlightSQL server implementation >> >> > working based on the feedback I'd got here. >> >> > >> >> > Now the only challenge is not being familiar with the Arrow format + >> >> > APIs/working with vector-based data >> >> > Majority of the time was in trying to figure out how to translate JVM >> >> > arrays/objects into Arrow values. >> >> > >> >> > The one thing I did have to do is override dependencies due to a >> problem >> >> in >> >> > netty/grpc with an >> >> > incompatible constructor signature for "PooledByteBufAllocator" >> >> > >> >> > // workaround for bug with PooledByteBufAllocator >> >> > implementation("io.grpc", "grpc-netty").version { >> >> > strictly("1.44.1") >> >> > } >> >> > implementation("io.netty", "netty-all").version { >> >> > strictly("4.1.74.Final") >> >> > } >> >> > implementation("io.netty", "netty-codec").version { >> >> > strictly("4.1.74.Final") >> >> > } >> >> > >> >> > On Mon, Mar 7, 2022 at 9:39 AM David Li <lidav...@apache.org> wrote: >> >> > >> >> >> No worries about questions, it's always good to see how people are >> using >> >> >> Arrow. >> >> >> >> >> >> For tunneling Flight/gRPC over HTTP: this has been a long-standing >> >> >> question. I believe some people have had success with one of the >> various >> >> >> gRPC-HTTP proxies. In particular, I recall Deephaven has done this >> >> >> successfully (with some workaround for the lack of streaming >> methods). >> >> If >> >> >> Nate is around, maybe he can describe what they've done. >> >> >> >> >> >> There's also an ongoing effort to enable alternative transports in >> >> Flight >> >> >> [1], which would let us implement (say) a native WebSocket transport. >> >> >> >> >> >> For these methods specifically: they basically wrap Protobuf >> >> >> SerializeToString/ParseFromString so you could use them to try to >> >> implement >> >> >> your own protocol using HTTP, yes. >> >> >> >> >> >> [1]: https://github.com/apache/arrow/pull/12465 >> >> >> >> >> >> -David >> >> >> >> >> >> On Mon, Mar 7, 2022, at 09:24, Gavin Ray wrote: >> >> >> > Due to the current implementation status of FlightSQL (C++/Rust/JVM >> >> only) >> >> >> > >> >> >> > I am trying to see whether it's possible to allow FlightSQL over >> >> >> something >> >> >> > like HTTP/REST so that arbitrary languages can be used. >> >> >> > >> >> >> > In the codebase, I saw these (and their deserialize counterparts): >> >> >> > >> >> >> > /// \brief Get the wire-format representation of this type. >> >> >> > /// Useful when interoperating with non-Flight systems (e.g. REST >> >> >> > /// services) that may want to return Flight types. >> >> >> > arrow::Result<std::string> SerializeToString() const; >> >> >> > >> >> >> > /** >> >> >> > * Get the serialized form of this protocol message. >> >> >> > * <p>Intended to help interoperability by allowing non-Flight >> >> services >> >> >> > to still return Flight types. >> >> >> > */ >> >> >> > public ByteBuffer serialize() { >> >> >> > return ByteBuffer.wrap(toProtocol().toByteArray()); >> >> >> > } >> >> >> > >> >> >> > I know this is probably very low-priority at the moment, but just >> >> wanted >> >> >> to >> >> >> > ask about whether it's even possible. >> >> >> > Thank you, and sorry for spamming the mailing list with so many >> >> questions >> >> >> > lately =) >> >> >> >> >> >>