通过在 Hive/Athena 的 CSV 文件中添加两列来创建外部 table

Create external table by adding two columns present in CSV file in Hive/Athena

我有一个包含三列 A、B、C 的 CSV 文件。

我想在它上面创建一个外部 table,它有两列 A,(B + C)。

是否可以在 table 创建过程中实现它,或者我是否应该在创建 table 后创建一个视图?

无法使用 CSVSerDe 或 LasySimpleSerDe,但可以使用 RegexSerDe。 table 定义中的每一列都应该在 input.regex.

中有相应的捕获组 ()

例如,如果文件是逗号分隔的,table可以这样定义:

 CREATE EXTERNAL TABLE mytable(
 colA string COMMENT '', 
 colBC string COMMENT '')
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.serde2.RegexSerDe' 
WITH SERDEPROPERTIES ( 
  'input.regex'= '^"?(.*?)"?,(.*)$'
LOCATION ...

input.regex 表示:

  1. ^ - 字符串锚点的开头
  2. "? - 可选报价
  3. (.*?) - 第一列的捕获组 - 任何时候都不贪心的任何字符
  4. "? - 可选报价
  5. , - 逗号
  6. (.*) - 捕获第 2 列的组(这将捕获第一个逗号之后的所有内容,直到结尾)
  7. $ - 字符串锚点的结尾

您可以编写能够正确捕获数据的正则表达式。 您可以在不创建 table 的情况下调试正则表达式,使用 regexp_replace :

select regexp_replace('"A",B,C', --data string example
                      '^"?(.*?)"?,(.*)$', --regex with 2 capturing groups for 2 columns
                     ' | '); --pipe delimited columns should be returned