在hive中使用python udf时如何查询多个列?

时间:2015-08-12 08:46:28

标签: python hadoop hive udf

我正在尝试执行此查询:

add FILE /home/user1/test/test_udf.py;

SELECT a.hash_code, col2
FROM (SELECT transform (col2, col3) using 'python test_udf.py' as hash_code, col2
      FROM sample_table) a ;

我能够使用udf成功生成hash_code,但另一列(col2)将填充为NULL

示例输出

sjhfshhalksjlkfj128798172jasjhas   NULL
ajsdlkja982988290819189089089889   NULL
jhsad817982mnsandkjsahj982398290   NULL

1 个答案:

答案 0 :(得分:1)

我知道你的HiveSql有什么问题。

transform (col2, col3) using 'python test_udf.py' as hash_code, col2 FROM sample_table中,hash_code, col2的值将从transform (col2, col3)的返回值进行解析。

clo2是从transform (col2, col3)解析的,NULL

我阅读了Transform doc,获取了相关信息,如下所示。

转换/映射减少语法

SELECT TRANSFORM '(' expression (',' expression)* ')'
  (inRowFormat)?
  USING 'my_reduce_script'
  ( AS colName (',' colName)* )?
  (outRowFormat)? (outRecordReader)?

您最好不要将transform与其他select混合,因为语法不会支持。

<强>更新

有一个黑客可以做你想做的事情:让test_udf.py返回hash_code\t col2。 所以你可以从中解析hash_code, col2。这可以解决您的问题。