【问题标题】:How to querying data from Amazon S3如何从 Amazon S3 查询数据
【发布时间】:2017-12-20 04:26:17
【问题描述】:

我希望使用源自 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 查询时我没有得到任何结果。

这是雅典娜桌,

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')

谢谢, 亚历杭德罗

【问题讨论】:

    标签: amazon-s3 amazon-dynamodb aws-lambda amazon-redshift amazon-athena


    【解决方案1】:

    您的表格看起来与您的数据不匹配,因为您的数据有一个顶级 Items 数组。在不重构 JSON 数据文件的情况下,我认为您需要这样的表定义:

    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;
    

    【讨论】:

    • 嗨,詹姆斯,谢谢。我从他的查询中得到结果。现在我正在尝试(不成功)使用新表从“有效负载”列中拆分值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    相关资源
    最近更新 更多