在Redshift中解析json数组对象并转换为表

use*_*388 0 arrays json amazon-web-services amazon-redshift

是否可以解析此 JSON 数组并将其转换为表并在 AWS Redshift 中执行此操作?

这个数组:

 [
  {"Event":"start","EventDateTime":"2015-09-15T03:45:16.681428Z"},
  {"Event":"process","EventDateTime":"2015-09-15T03:45:16.681428Z"},
  {"Event":"end","EventDateTime":"2015-09-15T03:45:16.681428Z"}
 ]
Run Code Online (Sandbox Code Playgroud)

转换为包含 Event 和 EventDateTime 字段的表。

我已经尝试过可用的 json 函数和字符串函数,但结果是空的。

谢谢!

Jak*_*ski 5

要从 JSON 格式执行 Redshift COPY,您必须准备 JSON 数据结构。JSON 数据结构由一组对象或数组组成。

在你的例子中:

  1. 创建以下数据集并将其上传到S3:

    {"event":"start","eventdatetime":"2015-09-15T03:45:16.681428Z"}
    {"event":"process","eventdatetime":"2015-09-15T03:45:16.681428Z"}
    {"event":"end","eventdatetime":"2015-09-15T03:45:16.681428Z"}
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在集群上创建表

    CREATE TABLE events (event VARCHAR, eventdatetime TIMESTAMP);
    
    Run Code Online (Sandbox Code Playgroud)
  3. 运行复制命令

    COPY events FROM 's3://bucket/file' JSON 'auto' TIMEFORMAT 'auto' CREDENTIALS 'aws_access_key_id=???;aws_secret_access_key=???';
    
    Run Code Online (Sandbox Code Playgroud)
  4. 测试结果

    SELECT * FROM events;
    
    Run Code Online (Sandbox Code Playgroud)

    结果

请记住,在此示例中将使用“自动”映射功能,并且由于列名称始终为小写,因此匹配的字段名称也必须为小写。。如果这不是一个选项,您可以使用JSONPaths 文件克服此限制。