Arrow Flight 接口如何使用

【详述】 3.4.0发布了Arrow Flight 接口功能,可更高效读取大数据量的查询结果,没有看到相关使用说明文档,有大佬可以说明一下吗
【StarRocks版本】3.4.0

同问,FE/CN 节点均设置了 arrow_flight_port 端口(9xxx),访问不通,报错

 File "pyarrow/_flight.pyx", line 1603, in pyarrow._flight.FlightClient.get_flight_info
 File "pyarrow/_flight.pyx", line 68, in pyarrow._flight.check_flight_status
 pyarrow._flight.FlightUnavailableError: Flight returned unavailable error, with message: failed to 
 connect to all addresses; last error: UNKNOWN: tcp handshaker shutdown

@acca @xlrei 这个问题我这里回一下,咱们 Arrow Flight 还木有上线,推到了 3.4.2 才会有,到时候社区会搞个文档和 demo 出来 ~

1赞

你好,请问这个文档和 demo 什么时候上线,因为看到代码库已经有这个功能了

你看见的这个代码是社区同学贡献的,目前我们跑起来有点问题不太可用,所以正式上线要在下一个版本 3.4.2。

1赞

大量数据查询可以用 INSERT INTO FILES 语句输出到parquet文件,然后用ftp下到本地解析,曲线救国,主流语言都支持parquet格式。标准数据库驱动有大量的耗时在序列化上,而且压缩效率不高,传parquet速度很快

3.4.2大约什么时候会出呀? 期盼已久

3.4.2 已出,请问 Arrow Flight 功能可用了吗?没找到相关文档和 demo

3.4.2 来不及对 arrow flight 做优化,目前还在做优化和测试,可能需要再等 1、2个小版本 :pray:

1赞

@xlrei @pagekpang @yvohc @acca 大概要到3.4.4或3.4.5才有。之前实现的不完整,也有不少bug,当前快开发完了。

请问3.4.4 和 3.4.5什么时候会出呀,3.4.4 会搭载Arrow Flight 接口功能吗

我刚才看了官网,3.5.1已经有了,3.4.4还没有,不知道3.4.5会不会有

提个 bug,查询一条数据不变的表(该表包含有 json 类型字段,去掉查询 json 字段则正常),不加 order by 时重复执行相同查询,数据条数会变

start = datetime.now()
cursor.execute(“use default_catalog.dataplatform;”)
cursor.execute(“select * from ads_autopilot_segmentation_ladder_table_manual;”)
result = cursor.fetchallarrow()
df = result.to_pandas()
duration = datetime.now() - start
print(f"Time taken: {duration}, Arrow table size: {result.nbytes / 1024 / 1024:.2f} MB, Rows: {len(df)}")
Time taken: 0:00:00.758815, Arrow table size: 74.67 MB, Rows: 13993

start = datetime.now()
cursor.execute(“use default_catalog.dataplatform;”)
cursor.execute(“select * from ads_autopilot_segmentation_ladder_table_manual;”)
result = cursor.fetchallarrow()
df = result.to_pandas()
duration = datetime.now() - start
print(f"Time taken: {duration}, Arrow table size: {result.nbytes / 1024 / 1024:.2f} MB, Rows: {len(df)}")
Time taken: 0:00:00.401073, Arrow table size: 32.34 MB, Rows: 7142

start = datetime.now()
cursor.execute(“use default_catalog.dataplatform;”)
cursor.execute(“select * from ads_autopilot_segmentation_ladder_table_manual;”)
result = cursor.fetchallarrow()
df = result.to_pandas()
duration = datetime.now() - start
print(f"Time taken: {duration}, Arrow table size: {result.nbytes / 1024 / 1024:.2f} MB, Rows: {len(df)}")
Time taken: 0:00:00.494243, Arrow table size: 38.90 MB, Rows: 7976