如何在 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 存储桶中

Hive 在 HDFS 中将文件存储在哪里?

当您在 Hive 中使用 S3 位置创建外部表时,数据何时传输?

在 Amazon s3 中将 Spark RDD 编写为 Gzipped 文件

如何在动作脚本中将二进制内容发送到 servlet

在 msxsl 中将节点作为参数传递:来自 XSLT for-each 的脚本 javascript 函数不起作用