AWS Glue Crawlers:是否可以推断出更改的列名并将它们映射到数据目录中的预定义列名?

时间:2019-09-23 18:54:48

标签: aws-glue aws-glue-data-catalog

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

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

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

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

1 个答案:

答案 0 :(得分: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本身中生成标题行,然后您可以在雅典娜中或通过Glue Crawler在CREATE EXTERNAL TABLE命令的基础上强加自己的模式/标题。