如何从 Amazon S3 查询数据
How to querying data from Amazon S3
我希望使用源自 Amazon DynamoDB 的数据创建一个 Tableau 仪表板。现在我正在使用 Amazon Lambda 将数据发送到 Amazon S3 上的一个存储桶,我正在 S3 存储桶上获取这个文件,
{
"Items": [
{
"payload": {
"phase": "T",
"tms_event": "2017-03-16 18:19:50",
"id_UM": 0,
"num_severity_level": 0,
"event_value": 1,
"int_status": 0
},
"deviceId": 6,
"tms_event": "2017-03-16 18:19:50"
}
]
}
我尝试使用 Amazon Athena 创建与 Tableau 的连接,但有效负载属性给我带来了问题,我在执行 SELECT 查询时没有得到任何结果。
这是雅典娜 Table,
CREATE EXTERNAL TABLE IF NOT EXISTS default.iot_table_test (
`payload` map<string,string>,
`deviceId` int,
`tms_event` string
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = '1'
) LOCATION 's3://iot-logging/'
TBLPROPERTIES ('has_encrypted_data'='false')
谢谢,
亚历杭德罗
您的 table 看起来与您的数据不匹配,因为您的数据具有顶级 Items
数组。如果不重构 JSON 数据文件,我认为您需要这样的 table 定义:
CREATE EXTERNAL TABLE IF NOT EXISTS default.iot_table_test_items (
`Items` ARRAY<
STRUCT<
`payload`: MAP<string, string>,
`deviceId`: int,
`tms_event`: string
>
>
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = '1'
) LOCATION 's3://iot-logging/'
TBLPROPERTIES ('has_encrypted_data'='false')
然后查询它取消嵌套 Items 数组:
SELECT
item.deviceId,
item.tms_event,
item.payload
FROM
default.iot_table_test_items
CROSS JOIN UNNEST (Items) AS i (item)
LIMIT 10;
我希望使用源自 Amazon DynamoDB 的数据创建一个 Tableau 仪表板。现在我正在使用 Amazon Lambda 将数据发送到 Amazon S3 上的一个存储桶,我正在 S3 存储桶上获取这个文件,
{
"Items": [
{
"payload": {
"phase": "T",
"tms_event": "2017-03-16 18:19:50",
"id_UM": 0,
"num_severity_level": 0,
"event_value": 1,
"int_status": 0
},
"deviceId": 6,
"tms_event": "2017-03-16 18:19:50"
}
]
}
我尝试使用 Amazon Athena 创建与 Tableau 的连接,但有效负载属性给我带来了问题,我在执行 SELECT 查询时没有得到任何结果。
这是雅典娜 Table,
CREATE EXTERNAL TABLE IF NOT EXISTS default.iot_table_test (
`payload` map<string,string>,
`deviceId` int,
`tms_event` string
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = '1'
) LOCATION 's3://iot-logging/'
TBLPROPERTIES ('has_encrypted_data'='false')
谢谢, 亚历杭德罗
您的 table 看起来与您的数据不匹配,因为您的数据具有顶级 Items
数组。如果不重构 JSON 数据文件,我认为您需要这样的 table 定义:
CREATE EXTERNAL TABLE IF NOT EXISTS default.iot_table_test_items (
`Items` ARRAY<
STRUCT<
`payload`: MAP<string, string>,
`deviceId`: int,
`tms_event`: string
>
>
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = '1'
) LOCATION 's3://iot-logging/'
TBLPROPERTIES ('has_encrypted_data'='false')
然后查询它取消嵌套 Items 数组:
SELECT
item.deviceId,
item.tms_event,
item.payload
FROM
default.iot_table_test_items
CROSS JOIN UNNEST (Items) AS i (item)
LIMIT 10;