impala-处理分区列上的特殊字符

twh00eeo  于 2021-06-26  发布在  Impala
关注(0)|答案(1)|浏览(994)

我目前正在做一项工作,将数据从暂存表复制到最终表。暂存表中用于对最终表进行分区的列有多个单引号记录(例如supplies'a、demand'a等)。因此,impala insert overwrite语句失败,并显示以下消息:
查询:insert overwrite rec\u details(rec\u id,rec\u name,rec\u value)partition(rec\u part)select rec\u id,rec\u name,rec\u value,暂存记录详细信息查询中的记录名称提交时间:2017-06-12 03:23:22(协调员:http://hostname:port)可以在以下位置监视查询进度:http://hostname:port/query\u plan?query\u id=ea4e14229d1c0119:a839f51500000000警告:tableloadingexception:未能加载表的元数据:rec\u详细信息原因:illegalstateexception:无效分区名称:rec\u part=-supplies'a
ddl语句如下:

  1. --DDL 1 - Staging Table
  2. CREATE EXTERNAL TABLE staging_rec_details(
  3. rec_id STRING,
  4. rec_name STRING,
  5. rec_value STRING
  6. )
  7. ROW FORMAT DELIMITED FIELDS TERMINATED BY '\007'
  8. LINES TERMINATED BY '\001'
  9. --WITH SERDEPROPERTIES ('serialization.format'='\t', 'field.delim'='\t')
  10. STORED AS TEXTFILE
  11. LOCATION '/staging/staging_rec_details'
  12. --DDL 2 - Final Table
  13. CREATE EXTERNAL TABLE rec_details(
  14. rec_id STRING,
  15. rec_name STRING,
  16. rec_value STRING
  17. )
  18. PARTITIONED BY (rec_part STRING)
  19. ROW FORMAT DELIMITED FIELDS TERMINATED BY '\007'
  20. LINES TERMINATED BY '\001'
  21. --WITH SERDEPROPERTIES ('serialization.format'='\t', 'field.delim'='\t')
  22. STORED AS PARQUET
  23. LOCATION '/data/rec_details'

以下是用于插入记录的impala语句:

  1. --Impala SQL
  2. INSERT OVERWRITE rec_details
  3. (
  4. rec_id, rec_name, rec_value
  5. )
  6. PARTITION (rec_part)
  7. SELECT
  8. rec_id, rec_name, rec_value, rec_name
  9. FROM staging_rec_details

当分区列有一个特殊字符(如单引号)时,如何将数据插入到最终表中?

gwo2fgha

gwo2fgha1#

通过替换特殊字符解决了此问题:

  1. -- Modified Impala SQL
  2. INSERT OVERWRITE rec_details
  3. (
  4. rec_id, rec_name, rec_value
  5. ) PARTITION (rec_part)
  6. SELECT
  7. rec_id, rec_name, rec_value,
  8. regexp_replace(rec_name,'\'','')
  9. FROM staging_rec_details

相关问题