带分隔符的数据上的配置单元 UDF

Posted

技术标签:

【中文标题】带分隔符的数据上的配置单元 UDF【英文标题】:hive UDF on data with delimiters 【发布时间】:2017-06-02 00:06:54 【问题描述】:

我正在使用 python 和 hive UDF 来取消透视数据。 'python.py' unpivots 数据,但我想在 Hive 上运行它。我无法处理包含空格和句点的项目。

有什么好办法绕过它吗?

我的起始表如下:

商店物品风味 -------- ----- ------------ 1个纸杯蛋糕巧克力 1个蛋糕流行红色天鹅绒 1个香草冰淇淋 1个饼干/糖果柠檬 2 纸杯蛋糕红丝绒 2个蛋糕汽水香草 2 冰淇淋巧克力 2块饼干/糖果巧克力

我使用内码获取:

商店 纸杯蛋糕 蛋糕棒棒糖 冰淇淋 饼干/糖果 -------- ------------ ------------ ----------- -------- --------- 1个巧克力红丝绒香草柠檬 2红色天鹅绒香草巧克力巧克力

使用:

SELECT TRANSFORM(store, item, flavor) USING ‘python.py’ 
AS (store, cupcake, cake pops, ice cream, cookies/candies) FROM mytable;

给出错误:“编译语句时出错:FAILED: ParseException line 3:25 mismatched input 'pops' expecting ) near 'cake' in transform Clause”

【问题讨论】:

不清楚你的python代码是做什么的 限定别名,例如`蛋糕汽水` 【参考方案1】:

尝试使用反引号或单引号。

如果您的 udf 用空格定义列名,我更喜欢反引号。但是,在这种情况下,我猜你需要使用单引号。

SELECT TRANSFORM(store, item, flavor) USING ‘python.py’ AS (store, cupcake, 'cake pops', ice cream, cookies/candies) FROM mytable;

【讨论】:

谢谢@hiropon。我的 'python.py' 实际上做了反透视,但我想在 Hive 上运行它。我编辑了问题。

以上是关于带分隔符的数据上的配置单元 UDF的主要内容,如果未能解决你的问题,请参考以下文章

无法在具有自定义分隔符的配置单元中插入数据

想要编写(或使用现有的?)UDF 来读取具有多字符分隔符的文件

指定表格页脚时,最后一个单元格上的uitableview分隔符丢失

如何加载“|”分隔文件到配置单元中,而不使用“行格式分隔符”创建配置单元表

如何将分号分隔的数据拆分为配置单元中的列并转置它?

将带逗号的双引号作为分隔符从 S3 导入 Amazon Redshift