使用 INSERT OVERWRITE DIRECTORY 从 HIVE 表插入 HDFS 失败
Posted
技术标签:
【中文标题】使用 INSERT OVERWRITE DIRECTORY 从 HIVE 表插入 HDFS 失败【英文标题】:Failed to insert into HDFS from HIVE table using INSERT OVERWRITE DIRECTORY 【发布时间】:2014-07-15 05:02:19 【问题描述】:我的主要需求是使用 INSERT OVERWRITE uery 从 HIVE 加载 HDFS 中的文件。在此查询中,我尝试加入 3 个配置单元表。以下是查询:
select * FROM
AGG_CUSTOMER_EXPSR_DRV_HIVE DRV
LEFT OUTER JOIN
AGG_CUSTOMER_EXPSR_SRC_HIVE SRC
ON
(SRC.CUSTOMER_ID = DRV.CUSTOMER_ID)
AND (SRC.AGGREGATION_LEVEL_CD = DRV.AGGREGATION_LEVEL_CD)
AND (SRC.PRODUCT_GROUP_CD = DRV.PRODUCT_GROUP_CD) AND (SRC.SRC_SYS_CD = DRV.SRC_SYS_CD)
LEFT OUTER JOIN
ALTERNATE_IP_HIVE AIP1
ON
(DRV.DERIVED_CUSTOMER_ID = AIP1.IP_ID) AND (AIP1.IP_TYPE_CD IN (1, 4))
LEFT OUTER JOIN
ALTERNATE_IP_HIVE AIP3
ON
(SRC.FINANCIAL_RPTNG_UNIT_ID = AIP3.IP_ID) AND (AIP3.IP_TYPE_CD = 3)
WHERE EXCLUDE_IND ='N';
但我收到如下错误:
-sh: syntax error near unexpected token
(`
有人可以帮我找出问题吗?
注意:我已经删除了 SELECT 子句中的字段。
【问题讨论】:
【参考方案1】:如果您在 hive 中创建了一个包含上述 sql 的结果字段数量的表,那么您可以简单地做
INSERT OVERWRITE TABLE <database_name.your_created_table_name> SELECT * FROM
AGG_CUSTOMER_EXPSR_DRV_HIVE DRV
LEFT OUTER JOIN
AGG_CUSTOMER_EXPSR_SRC_HIVE SRC
ON
(SRC.CUSTOMER_ID = DRV.CUSTOMER_ID)
AND (SRC.AGGREGATION_LEVEL_CD = DRV.AGGREGATION_LEVEL_CD)
AND (SRC.PRODUCT_GROUP_CD = DRV.PRODUCT_GROUP_CD) AND (SRC.SRC_SYS_CD = DRV.SRC_SYS_CD)
LEFT OUTER JOIN
ALTERNATE_IP_HIVE AIP1
ON
(DRV.DERIVED_CUSTOMER_ID = AIP1.IP_ID) AND (AIP1.IP_TYPE_CD IN (1, 4))
LEFT OUTER JOIN
ALTERNATE_IP_HIVE AIP3
ON
(SRC.FINANCIAL_RPTNG_UNIT_ID = AIP3.IP_ID) AND (AIP3.IP_TYPE_CD = 3)
WHERE EXCLUDE_IND ='N';
来自 SELECT 是您的查询。您可以查看this URL 以获取有关 hiveql 的更多帮助
【讨论】:
对不起..我的错..我尝试在 HIVE 命令提示符中运行 INSERT OVERWRITE 查询,现在它工作正常。但是下面的 CASE 语句导致了一个问题: CASE WHEN (DRV.AGGREGATION_LEVEL_CD = 1) THEN CASE WHEN (SUBSTR(AIP1.SRC_SYS_UNIQUE_KEY_TXT, 1, (INSTR(AIP1.SRC_SYS_UNIQUE_KEY_TXT, '~', 1, 1) - 1)) NOTNULL) THEN SUBSTR(AIP1.SRC_SYS_UNIQUE_KEY_TXT, 1, (INSTR(AIP1.SRC_SYS_UNIQUE_KEY_TXT, '~', 1, 1) - 1)) 失败:SemanticException [错误 10015]:第 1:1125 行参数长度不匹配 '1':函数 INSTR正好接受 2 个参数。 WHEN ('') THEN '' ELSE NULL END ELSE '' END AS OVERRIDE_FAMILY_CUSTOMER_SRC_SYS_CD, 您能否分享您的完整查询并说明您遇到的问题 实际上我的问题是,通过 INSERT OVERWRITE DIRECTORY 将表从 HIVE 导入 HDFS 时,我无法使用 JOIN。我在上面的 INSERT 中使用的查询有 INSTR、SUBSTR、NOT NULL,问题出在 INSTR 语法上。我不知道 SQL 和 HIVE-QL 之间的 INSTR 语法差异。现在它工作正常。 很高兴你让它工作了。如果可能的话,只需编辑您的问题并将您的解决方案与 cmets 一起使用,以防万一有人查看此帖子,它会对他们有所帮助。以上是关于使用 INSERT OVERWRITE DIRECTORY 从 HIVE 表插入 HDFS 失败的主要内容,如果未能解决你的问题,请参考以下文章
✨[面试进阶]INSERT INTO 和 INSERT OVERWRITE 的区别?(Hive篇)✨
使用insert into和insert overwrite插入数据的区别Hive or Odps
使用insert into和insert overwrite插入数据的区别Hive or Odps