如何在 hive 脚本中将函数作为 s3 位置的输入
Posted
技术标签:
【中文标题】如何在 hive 脚本中将函数作为 s3 位置的输入【英文标题】:How to give a function as a input for s3 location in hive script 【发布时间】:2013-11-26 10:35:49 【问题描述】:我正在努力做到这一点;
location/11.11
location/12.11
location/13.11
为了做到这一点,我尝试了很多事情,但无法实现。 现在我有一个 Udf hive 函数,它返回我 s3 表的位置,但我面临一个错误;
ParseException line 1:0 无法识别“LOCATION”附近的输入 'datenow' '(' LOCATION datenow(); NoViableAltException(143@[])
这是我的 hive 脚本,我有两个外部表。
CREATE TEMPORARY FUNCTION datenow AS 'LocationUrlGenerator';
CREATE EXTERNAL TABLE IF NOT EXISTS s3( file Array<String>)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' COLLECTION ITEMS TERMINATED BY '\001' LINES TERMINATED BY '\n';
LOCATION datenow();
【问题讨论】:
【参考方案1】:LOCATION
接受字符串,而不是 UDF。语言手册有点不清楚,因为它只指定了[LOCATION hdfs_path]
并没有定义hdfs_path
,但它只能是一个 URL 位置路径,一个字符串。一般而言,UDF 在 DDL 上下文中是不可接受的。
使用选择的任何文本工具构建脚本并运行该脚本。
【讨论】:
【参考方案2】:我就是这样处理的,
INSERT INTO TABLE S3
PARTITION(time)
SELECT func(json),from_unixtime(unix_timestamp(),'yyyy-MM-dd') AS time FROM tracksTable;
【讨论】:
以上是关于如何在 hive 脚本中将函数作为 s3 位置的输入的主要内容,如果未能解决你的问题,请参考以下文章
当您在 Hive 中使用 S3 位置创建外部表时,数据何时传输?