我有一个AWS Athena服务。查询后Athena生成一个CSV文件。假设我想在excel或google工作表中打开该CSV时看到以下结果(带标题)。
对于第7行到第13行是可以的。这是雅典娜的实际结果。我想添加一个标题(如图)。我该怎么做?
qcuzuvrc1#
这是不可能的,因为Athena不支持它,而且它也不兼容CSV格式。如果你想添加“头文件”,你可以使用“union all”,但它不会给予你预期的结果。关于CSV格式:https://en.wikipedia.org/wiki/Comma-separated_values
hlswsv352#
即使它是一些肮脏的东西,我已经看到它的使用这些头文件,以避免值重复。我将使用我自己的样本文件在这里,你可以修改它:| 颜色0|列1|col2|col3|col4|| --------------|--------------|--------------|--------------|--------------|| 客户|约翰·史密斯|--|--|--|| 订单ID|订单_212345|--|--|--|| 日期|2012年10月5日|--|--|--|| 通货|欧元|--|--|--|| 产品ID|产品名称|价格|单位|金额|| PID_1234|糖|一点二|公斤|十二点|| 产品识别码_2345|法里纳|2.10|公斤|20点|| PID_3455|蛋|一点零五分|单位|两百|| PID_3555|亲爱的|三点八五|升|三点|前四行是 dirty header,它们应该代表所有其余行重复的数据。结果如下:| 客户|订单ID|日期|通货|产品ID|产品名称|价格|单位|金额|| --------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------|| 约翰·史密斯|订单_212345|2012年10月5日|欧元|PID_1234|糖|一点二|公斤|十二点|| 约翰·史密斯|订单_212345|2012年10月5日|欧元|产品识别码_2345|法里纳|2.10|公斤|20点|| 约翰·史密斯|订单_212345|2012年10月5日|欧元|PID_3455|蛋|一点零五分|单位|两百|| 约翰·史密斯|订单_212345|2012年10月5日|欧元|PID_3555|亲爱的|三点八五|升|三点|一个可能的查询是:
WITH RAW_DATA AS ( SELECT col0, col1, col2, col3, col4, , "$path" file , row_number() over () as row_num FROM "database"."orders" ), HEADER_ROWS AS ( SELECT col0 key , col1 value , file FROM "database"."orders" WHERE row_num between 1 and 4 ) , DATA_ROWS AS ( SELECT col0 product_id , col1 product_name , col2 price , col3 unit , col4 amount , file FROM "database"."orders" WHERE (NOT (row_num between 1 and 5)) ) , HEADER AS ( SELECT file , "map_agg"(key, value) header FROM HEADER_ROWS GROUP BY file ) , ALL_DATA AS ( SELECT , header['customer'] customer , header['order_id'] order_id , header['date'] date , header['currency'] currency , data_row.product_id , data_row.product_name , data_row.price , data_row.unit , data_row.amount FROM (HEADER INNER JOIN DATA_ROWS data_row ON (HEADER.file = data_row.FILE)) ) SELECT * FROM ALL_DATA
如果你只想跳过头文件:
SELECT *, row_number() over () as row_num FROM "mytable" WHERE NOT (row_num between 1 and 7)
2条答案
按热度按时间qcuzuvrc1#
这是不可能的,因为Athena不支持它,而且它也不兼容CSV格式。如果你想添加“头文件”,你可以使用“union all”,但它不会给予你预期的结果。
关于CSV格式:
https://en.wikipedia.org/wiki/Comma-separated_values
hlswsv352#
即使它是一些肮脏的东西,我已经看到它的使用这些头文件,以避免值重复。我将使用我自己的样本文件在这里,你可以修改它:
| 颜色0|列1|col2|col3|col4|
| --------------|--------------|--------------|--------------|--------------|
| 客户|约翰·史密斯|--|--|--|
| 订单ID|订单_212345|--|--|--|
| 日期|2012年10月5日|--|--|--|
| 通货|欧元|--|--|--|
| 产品ID|产品名称|价格|单位|金额|
| PID_1234|糖|一点二|公斤|十二点|
| 产品识别码_2345|法里纳|2.10|公斤|20点|
| PID_3455|蛋|一点零五分|单位|两百|
| PID_3555|亲爱的|三点八五|升|三点|
前四行是 dirty header,它们应该代表所有其余行重复的数据。结果如下:
| 客户|订单ID|日期|通货|产品ID|产品名称|价格|单位|金额|
| --------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------|
| 约翰·史密斯|订单_212345|2012年10月5日|欧元|PID_1234|糖|一点二|公斤|十二点|
| 约翰·史密斯|订单_212345|2012年10月5日|欧元|产品识别码_2345|法里纳|2.10|公斤|20点|
| 约翰·史密斯|订单_212345|2012年10月5日|欧元|PID_3455|蛋|一点零五分|单位|两百|
| 约翰·史密斯|订单_212345|2012年10月5日|欧元|PID_3555|亲爱的|三点八五|升|三点|
一个可能的查询是:
如果你只想跳过头文件: