1

我需要从 CSV 文件中重复加载数据,数据将放在具有预定义结构的输出文件/表中。但是,每次迭代中输入文件的列名可能会略有变化。

例如,列名在第一次迭代中将是“Serial_Num”,而在下一次迭代中它可能会显示为“Serial_Number”。

如果我定义了一个列名为“Serial_Num”的数据目录表,我是否可以编写此名称的可能变体并将它们全部映射到已定义的列“Serial_Num”?

我了解列名每次可能会出现不同的变体,并且可能不遵循通用模式。我希望定义一些可能在逻辑上预期的模式,以便可以避免手动干预。

4

1 回答 1

0

如果每个 csv 文件都将第一行作为标题,您可以在 athena 上使用以下语法在 Glue Catalog 中创建所需的表:

CREATE EXTERNAL TABLE IF NOT EXISTS {{tablename}} ({{headers}}) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' 
WITH SERDEPROPERTIES ( 'escapeChar'='/', 'quoteChar'='\\"', 'separatorChar'=',') 
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' 
LOCATION '{{location}}' TBLPROPERTIES ('skip.header.line.count'='1')"

将占位符 {{tablename}}、{{headers}} 和 {{location}} 替换为各自的值。

更好的解决方案是停止在 CSV 本身中生成标题行,然后您可以使用 athena 中的 CREATE EXTERNAL TABLE 命令或通过 Glue Crawler 将自己的架构/标题强加于其之上。

于 2019-09-24T08:30:06.143 回答