我使用Athena查询表,并获得CSV格式的输出文件,如下所示:
"col_a_string","col_b_string","col_c_timestamp","col_d_int"现在,我想将csv文件加载到另一个Athena表中,这样我就可以检查并使用我的数据-但是当我用FIELDS TERMINATED BY ','定义我的表时,值保留括号,所有字段都被认为是字符串(这为我提供了时间戳和整型列的空列)。
雅典娜不能读取雅典娜的输出,这有点荒唐。我如何定义我的表,使它可以忽略括号?
谢谢!
发布于 2018-12-18 04:50:27
现在看起来这是一个特性了:https://docs.aws.amazon.com/athena/latest/ug/ctas.html
CREATE TABLE AS SELECT (CTAS)查询根据另一个查询的SELECT语句的结果在雅典娜中创建一个新表。雅典娜将CTAS语句创建的数据文件存储在亚马逊S3中的指定位置。有关语法,请参阅CREATE TABLE AS。
使用CTAS查询可执行以下操作:
只需一步即可从查询结果创建表,无需重复查询原始数据集。这使得处理原始数据集变得更容易。
将查询结果转换为其他存储格式,如Parquet和ORC。这提高了雅典娜的查询性能并降低了查询成本。有关信息,请参阅列式存储格式。
创建仅包含所需数据的现有表的副本。
发布于 2018-04-13 21:28:16
试试这个:
CREATE EXTERNAL TABLE IF NOT EXISTS my_table (
`col_a_string` String,
`col_b_string` String,
`col_c_timestamp` TIMESTAMP,
`col_d_int ` Int,
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
"separatorChar" = ",",
"quoteChar" = "\""
) LOCATION 's3://your-s3-location'
TBLPROPERTIES ("skip.header.line.count"="1")这对你有效吗?请注意序列化/反序列化属性中的quotechar属性。
发布于 2020-02-29 10:46:37
这是我通常从csv加载数据的方式。
CREATE EXTERNAL TABLE IF NOT EXISTS my_table(
`col_a_string` String,
`col_b_string` String,
`col_c_timestamp` TIMESTAMP,
`col_d_int ` Int)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
'separatorChar' = ',',
'quoteChar' = '\"',
'escapeChar' = '\\' )
STORED AS TEXTFILE
LOCATION '<s3://filepath>'
TBLPROPERTIES ('has_encrypted_data'='false',
"skip.header.line.count"="1");这样做的好处是,即使某些列有双引号,它也可以正确地解析和加载
例如:col_a_string,"col_b_string",col_c_timestamp,"col_d_int“
https://stackoverflow.com/questions/49775133
复制相似问题