#arrays #json #parsing #element #snowflake-cloud-data-platform
#массивы #json #синтаксический анализ #элемент #снежинка-облако-платформа данных
Вопрос:
Как я могу получить данные из этого массива, хранящиеся в столбце вариантов в Snowflake. Мне все равно, новая ли это таблица, представление или запрос. Существует второй столбец типа varchar(256), который содержит уникальный идентификатор. Если вы можете просто помочь мне прочитать «подтвержденные» данные и данные «editorIds», я, вероятно, смогу взять их оттуда. Большое спасибо!
Примером вывода может быть
UniqueID ConfirmationID EditorID
u3kd9 xxxx-436a-a2d7 nupd
u3kd9 xxxx-436a-a2d7 9l34c
R3nDo xxxx-436a-a3e4 5rnj
yP48a xxxx-436a-a477 jTpz8
yP48a xxxx-436a-a477 nupd
[
{
"confirmed": {
"Confirmation": "Entry ID=xxxx-436a-a2d7-3525158332f0: Confirmed order submitted.",
"ConfirmationID": "xxxx-436a-a2d7-3525158332f0",
"ConfirmedOrders": 1,
"Received": "8/29/2019 4:31:11 PM Central Time"
},
"editorIds": [
"xxsJYgWDENLoX",
"JR9bWcGwbaymm3a8v",
"JxncJrdpeFJeWsTbT"
] ,
"id": "xxxxx5AvGgeSHy8Ms6Ytyc-1",
"messages": [],
"orderJson": {
"EntryID": "xxxxx5AvGgeSHy8Ms6Ytyc-1",
"Orders": [
{
"DropShipFlag": 1,
"FromAddressValue": 1,
"OrderAttributes": [
{
"AttributeUID": 548
},
{
"AttributeUID": 553
},
{
"AttributeUID": 2418
}
],
"OrderItems": [
{
"EditorId": "aC3f5HsJYgWDENLoX",
"ItemAssets": [
{
"AssetPath": "https://xxxx573043eac521.png",
"DP2NodeID": "10000",
"ImageHash": "000000000000000FFFFFFFFFFFFFFFFF",
"ImageRotation": 0,
"OffsetX": 50,
"OffsetY": 50,
"PrintedFileName": "aC3f5HsJYgWDENLoX-10000",
"X": 50,
"Y": 52.03909266409266,
"ZoomX": 100,
"ZoomY": 93.75
}
],
"ItemAttributes": [
{
"AttributeUID": 2105
},
{
"AttributeUID": 125
}
],
"ItemBookAttribute": null,
"ProductUID": 52,
"Quantity": 1
}
],
"SendNotificationEmailToAccount": true,
"SequenceNumber": 1,
"ShipToAddress": {
"Addr1": "Addr1",
"Addr2": "0",
"City": "City",
"Country": "US",
"Name": "Name",
"State": "ST",
"Zip": "00000"
}
}
]
},
"orderNumber": null,
"status": "order_placed",
"submitted": {
"Account": "350000",
"ConfirmationID": "xxxxx-436a-a2d7-3525158332f0",
"EntryID": "xxxxx-5AvGgeSHy8Ms6Ytyc-1",
"Key": "D83590AFF0CC0000B54B",
"NumberOfOrders": 1,
"Orders": [
{
"LineItems": [],
"Note": "",
"Products": [
{
"Price": "00.30",
"ProductDescription": "xxxxxint 8x10",
"Quantity": 1
},
{
"Price": "00.40",
"ProductDescription": "xxxxxut Black 8x10",
"Quantity": 1
},
{
"Price": "00.50",
"ProductDescription": "xxxxx"
},
{
"Price": "00.50",
"ProductDescription": "xxxscount",
"Quantity": 1
}
],
"SequenceNumber": "1",
"SubTotal": "00.70",
"Tax": "1.01",
"Total": "00.71"
}
],
"Received": "8/29/2019 4:31:10 PM Central Time"
},
"tracking": null,
"updatedOn": 1.598736670503000e 12
}
]
Комментарии:
1. Можете ли вы поделиться тем, как вы хотите видеть выходные данные, которые вы запросили? Это поможет правильно сформировать запрос.
2. Я добавил его в исходное сообщение. Спасибо!
Ответ №1:
Итак, вот как я бы запросил этот точный JSON, предполагая, что данные находятся в столбце var
в таблице x
:
SELECT x.var[0]:confirmed:ConfirmationID::varchar as ConfirmationID,
f.value::varchar as EditorID
FROM x,
LATERAL FLATTEN(input => var[0]:editorIds) f
;
Поскольку ваш образец вывода не соответствует предоставленному вами JSON, я предполагаю, что это то, что вам нужно.
Кроме того, в качестве примечания, ваш JSON включает в себя outer [ ], который указывает, что вся строка JSON находится внутри массива. Это причина var[0]
в моем запросе. Если у вас есть несколько записей внутри этого массива, вам следует это удалить. В общем, вы должны исключить их и вместо этого загружать каждую запись в таблицу отдельно. Я не был уверен, сможете ли вы внести это изменение, поэтому я просто хотел отметить.
Комментарии:
1. Да, это тот результат, который я искал. Спасибо! ДА. Я хотел бы извлечь несколько элементов из массива в скобках в столбцы. Могу ли я преобразовать это в новую таблицу или представление? Буду ли я использовать тот же процесс, что и выше? И если бы это было сделано, мне больше не нужен был бы синтаксис «[0]»?
2. Запрос, который я использовал выше, можно использовать либо для обновления таблицы, либо для использования представления (материализованный может быть более эффективным, если вам это нужно). Если [ ] всегда находятся в варианте каждой записи, и в этом массиве есть только одна запись данных, то вам нужно будет использовать этот синтаксис [0] .