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

Impala-处理分区列上的特殊字符,impala,hadoop-partitioning,Impala,Hadoop Partitioning,我目前正在从事一项将数据从临时表复制到最终表的工作。暂存表中用于在最终表上进行分区的列有多条带单引号的记录(例如,supplies'A、demand'A等)。因此,impala INSERT OVERRIDE语句失败,并显示以下消息: 查询:插入覆盖记录详细信息( 记录id、记录名称、记录值)分区(记录部分)选择 提交时间:2017-06-12 03:23:22(协调人: )可以在以下位置监视查询进度: 警告:TableLoadingException:未能加载表的元数据: 记录详细信息由以下原

我目前正在从事一项将数据从临时表复制到最终表的工作。暂存表中用于在最终表上进行分区的列有多条带单引号的记录(例如,supplies'A、demand'A等)。因此,impala INSERT OVERRIDE语句失败,并显示以下消息:

查询:插入覆盖记录详细信息( 记录id、记录名称、记录值)分区(记录部分)选择 提交时间:2017-06-12 03:23:22(协调人: )可以在以下位置监视查询进度: 警告:TableLoadingException:未能加载表的元数据: 记录详细信息由以下原因引起:IllegalStateException:无效分区名称: rec_零件=-supplies'A

DDL语句如下所示:

--DDL 1 - Staging Table
CREATE EXTERNAL TABLE staging_rec_details(
    rec_id STRING, 
    rec_name STRING, 
    rec_value STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\007'
LINES TERMINATED BY '\001'
--WITH SERDEPROPERTIES ('serialization.format'='\t', 'field.delim'='\t')
STORED AS TEXTFILE
LOCATION '/staging/staging_rec_details'

--DDL 2 - Final Table
CREATE EXTERNAL TABLE rec_details(
    rec_id STRING, 
    rec_name STRING, 
    rec_value STRING
)
PARTITIONED BY (rec_part STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\007'
LINES TERMINATED BY '\001'
--WITH SERDEPROPERTIES ('serialization.format'='\t', 'field.delim'='\t')
STORED AS PARQUET
LOCATION '/data/rec_details'
以下是用于插入记录的Impala语句:

--Impala SQL
INSERT OVERWRITE rec_details
(
        rec_id, rec_name, rec_value
)
PARTITION (rec_part)
SELECT
        rec_id, rec_name, rec_value, rec_name
FROM staging_rec_details

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

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

-- Modified Impala SQL 
   INSERT OVERWRITE rec_details 
   (
        rec_id, rec_name, rec_value 
   ) PARTITION (rec_part) 
   SELECT
        rec_id, rec_name, rec_value,            
        regexp_replace(rec_name,'\'','') 
   FROM staging_rec_details

旁注:
行格式
子句对于柱状格式(如拼花地板)没有意义。注释的
serdeproperty
子句显然与
行格式
子句相矛盾……顺便问一下,您有什么问题吗?感谢@Samson Scharfrichter对行格式和serdeproperty的评论。另一方面,我认为对于替换特定字符,
translate()
可能更有效;使用RegExp匹配单个字符就像在小钉子上使用大锤子一样。