将雅典娜输出加载到雅典娜表中



我使用 Athena 查询了一个表,并得到了 CSV 形式的输出文件,如下所示:

"col_a_string","col_b_string","col_c_timestamp","col_d_int"

现在,我想获取 csv 文件并将其加载到另一个 Athena 表中,以便我可以检查我的数据并使用它 - 但是当我使用 FIELDS TERMINATED BY ',' 定义我的表时,值保留括号,所有字段都被视为字符串(这给了我时间戳和 int 列的空白列(。

雅典

娜看不懂雅典娜输出有点荒谬......如何定义我的表,以便它可以忽略括号?

谢谢!

看起来这是一个功能:https://docs.aws.amazon.com/athena/latest/ug/ctas.html

将表创建为选择(CTAS(查询在雅典娜中创建新表 来自另一个查询的 SELECT 语句的结果。雅典娜 将 CTAS 语句创建的数据文件存储在指定的 在亚马逊 S3 中的位置。有关语法,请参阅将表创建为。

使用 CTAS 查询可以:

一步从查询结果创建表,无需重复 查询原始数据集。这样可以更轻松地处理原始数据 集。

将查询结果转换为其他存储格式,例如 Parquet 和兽人。这提高了查询性能并降低了查询成本 雅典娜。有关信息,请参阅列式存储格式。

创建仅包含所需数据的现有表的副本。

试试这个:

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 属性。

这就是我通常从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">

试试这个,对我有用

CREATE EXTERNAL TABLE `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 ( 
  'escapeChar'='\', 
  'separatorChar'=',') 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://<path>'
TBLPROPERTIES (
  'skip.header.line.count'='1')

最新更新