从 dynamo 数据库源加载时使用 COPY 命令处理 Amazon Redshift 中的嵌套字段

问题描述 投票:0回答:1

我正在尝试将数据从 DynamoDB 表加载到 Redshift 中。该表包含无法正确获取的嵌套字段。 DynamoDB 内的数据具有如下结构

"Status": {
    "S": "queued"
  },
"optional": {
    "M": {
      "file_size": {
        "N": "1.884"
      },
      "records_count": {
        "N": "1276"
      },
      "submission_timestamp": {
        "N": "1716764400"
      }
    }
  },
}

在 Redshift 中我尝试了两种解决方案,一种是创建一个类似的表

CREATE TABLE my_redshift_table (
    status VARCHAR(50)
    optional_file_size DECIMAL(10,4),
    optional_records_count BIGINT,
    optional_submission_timestamp BIGINT,
);

但是列中的数据为 NULL

另一个选项是尝试像这样超级可选

CREATE TABLE my_redshift_table (
    status VARCHAR(50)
    optional SUPER,
);

但根据我的理解,数据类型 SUPER 无效,因为它会引发错误,并且阅读文档时支持的类型是 STRING 或 NUMBER。

有什么好的方法来处理嵌套字段吗?我不想通过展平数据并存储在 S3 中来执行 ETL 过程,需要直接从 DynamoDB 查询或加载到 Redshift。

使用数据类型 SUPER 时出现错误消息

ERROR: Unsupported Data Type: Current Version only supports Strings and Numbers Detail: ----------------------------------------------- error: Unsupported Data Type: Current Version only supports Strings and Numbers code: 9005 context: Table Name = ddp-dev-euwest1-bookkeeper-v2 query: 6301675[child_sequence:1] location: copy_dynamodb_scanner.cpp:182 process: query0_4084_6301676 [pid=27935] ----------------------------------------------- [ErrorId: 1-6737121e-20350b656e58fdf1669a5df6]
sql amazon-dynamodb amazon-redshift data-warehouse amazon-redshift-serverless
1个回答
0
投票

您可以按如下方式创建目标表:

CREATE TABLE my_redshift_table (
    status VARCHAR(50),
    optional VARCHAR(MAX)
);

然后查询:

SELECT 
    status,
    json_extract_path_text(optional, 'file_size')::DECIMAL(10, 4) AS optional_file_size,
    json_extract_path_text(optional, 'records_count')::BIGINT AS optional_records_count,
    json_extract_path_text(optional, 'submission_timestamp')::BIGINT AS optional_submission_timestamp
FROM my_redshift_table;

在 Redshift 中,VARCHAR(MAX) 数据类型为 65535

© www.soinside.com 2019 - 2024. All rights reserved.