在Apache Drill中将CSV字符串转换为多个列

时间:2015-11-10 05:04:04

标签: csv query-optimization apache-drill sqlline

使用:Apache Drill

我试图以更结构化的形式提供以下数据:

"apple","juice", "box:12,shipment_id:143,pallet:B12" 
"mango", "pulp", "box:7,shipment_id:133,pallet:B19,route:11"
"grape", "jam", "box:10"

期望的输出:

fruit, product, box_id, shipment_id, pallet_id, route_id
apple,juice, 12, 143, B12, null
mango, pulp, 7, 133, B19, 11
grape, jam, 10, null, null, null

数据集会运行几个GB。 Drill将输入读入三列,最后一个字符串位于一列中。通过在最后一列上执行字符串操作操作(REGEXP_REPLACE和CONCAT),然后将列读取为json(CONVERT_FROM),最后使用KVGEN和FLATTEN分隔成不同的列,成功实现了所需的输出。

由于正则表达式功能,执行时间非常长。有更好的方法吗?

(PS:将执行时间与使用pyspark作业进行比较以获得所需的输出)。

1 个答案:

答案 0 :(得分:0)

我没有看到任何其他方式100%使用Apache Drill,没有任何中间存储

您可以尝试使用Java中的自定义函数,以便更容易编写。

既然你已经完成了工作, 您是否尝试将数据保存在Parquet文件中? CTAS命令:http://drill.apache.org/docs/create-table-as-ctas-command/

这会使后续查询更快。