【发布时间】:2016-01-05 07:17:24
【问题描述】:
我使用 pig 处理了我的数据并存储在 hdfs 位置 (/tmp/output)。现在必须将该数据读入指向同一位置(/tmp/ouput)的配置单元表。但是当我尝试从配置单元表中获取日期值时,我显示为 NULL。 以下是我使用的命令:
STORE DATA into '/tmp/output' USING PigStorage('\u0001');
当我触发以下查询时:
hive -e "select load_date from 'STUDENT'"
它给我NULL
2015-10-06T10:09:00.000-04:00 是我在 /tmp/output 中看到的时间格式。
似乎 hive 无法读取这种格式(hive 中的时间戳)。 如何将这种格式转换为 hive 可读的格式。
任何帮助将不胜感激!
【问题讨论】:
-
您是否设置了
HCatalog?如果是这样,您可以将输出直接发送到 Hive 表并绕过 hdfs。 -
是的,我有 HCatalog。你能告诉如何将猪输出直接移动到蜂巢表吗?
-
创建一个 Hive 表,其列名和数据类型与您要存储的 Pig 中的关系完全相同。在 Pig 中,将 store 命令更改为
STORE DATA INTO hive_db.hive_table USING org.apache.hcatalog.pig.HCatStorer(),其中hive_db和hive_table是您刚刚创建的 hive 数据库/表的名称。 -
文本文件中的时间戳必须使用格式 yyyy-mm-dd hh:mm:ss[.f...]。如果它们是另一种格式,则将它们声明为适当的类型(INT、FLOAT、STRING 等)并使用 UDF 将它们转换为时间戳。
-
@GoBrewers14 谢谢。将数据直接存储到配置单元表对我有用。
STORE DATA INTO hive_db.hive_table USING org.apache.hive.hcatalog.pig.HCatStorer()
标签: hadoop hive apache-pig