Amazon Redshift 使用 COPY 命令仅从 JSON 中获取 1 行
Posted
技术标签:
【中文标题】Amazon Redshift 使用 COPY 命令仅从 JSON 中获取 1 行【英文标题】:Amazon Redshift gets only 1 row from JSON with COPY command 【发布时间】:2020-08-04 13:54:01 【问题描述】:我正在尝试将具有以下结构的 GA 数据复制到 Redshift JSON 文件中:
"reports": [
"columnHeader":
"dimensions": [
"ga:date",
"ga:country"
],
"metricHeader":
"metricHeaderEntries": [
"name": "ga:users",
"type": "INTEGER"
,
"name": "ga:newUsers",
"type": "INTEGER"
,
"name": "ga:sessionduration",
"type": "TIME"
]
,
"data":
"rows": [
"dimensions": [
"20200731",
"(not set)"
],
"metrics": [
"values": [
"7",
"6",
"5.0"
]
]
,
"dimensions": [
"20200731",
"Albania"
],
"metrics": [
"values": [
"2",
"1",
"0.0"
]
]
,
"dimensions": [
"20200731",
"Algeria"
],
"metrics": [
"values": [
"1",
"1",
"224.0"
]
]
,
如果我使用以下 JSON 路径,它只会加载数组中的第一个对象:
"jsonpaths": [
"$['reports'][0]['data']['rows'][0]['dimensions'][0]",
"$['reports'][0]['data']['rows'][0]['dimensions'][1]",
"$['reports'][0]['data']['rows'][0]['metrics'][0]['values'][0]" ,
"$['reports'][0]['data']['rows'][0]['metrics'][0]['values'][1]" ,
"$['reports'][0]['data']['rows'][0]['metrics'][0]['values'][2]"
]
我尝试将 ['rows'][0] 更改为 ['rows'][*] 和 ['rows'] 但没有任何帮助。 我应该如何更改 JSON 路径以从文件中加载所有数据?
谢谢!
【问题讨论】:
向我们展示您的 SQL 尝试。 从 's3://mbit-warehouse/TransferGANonBounceSessionsDataFromGaToS3/f33d58b1960c20d5bf84fc2ee4ae031a-2020-08-04T10:24:776' iam_role 'arn:aws:iam::role 复制 dev.google_analytics.ga_country_test /XXXXX' JSON 's3://mbit-warehouse/TransferGANonBounceSessionsDataFromGaToS3/testfirst_copy.json' DATEFORMAT 'YYYYMMDD' 【参考方案1】:由于您指定的索引[0]
(第一项),Redshift 只能看到第一行。您目前不能直接摄取像这样嵌套的 JSON。
要访问此文件中的所有嵌套数组,您需要将其定义为外部表,然后使用嵌套数据查询语法。
从这里开始:"Tutorial: Querying nested data with Amazon Redshift Spectrum"
【讨论】:
以上是关于Amazon Redshift 使用 COPY 命令仅从 JSON 中获取 1 行的主要内容,如果未能解决你的问题,请参考以下文章
amazon redshift jdbc driver CopyManager.copyIn COPY 命令语法
使用 Avro 文件批量复制到 Amazon Redshift 中的异常处理
Amazon RedShift 中的“复制”命令是不是是原子的?
Redshift COPY 命令与 AWS 数据管道 RedshiftCopyActivity