Вложение результата OBJECT_CONSTRUCT в массив JSON при выгрузке данных из Snowflake - PullRequest
0 голосов
/ 17 октября 2018

Я использую OBJECT_CONSTRUCT для таблицы с несколькими строками следующим образом:

COPY INTO @%mytable
  FROM (
    SELECT OBJECT_CONSTRUCT(
      'id', id, 'first_name', first_name,
      'last_name', last_name, 'city', city, 'state', state
    ) FROM mytable
  )
  FILE_FORMAT = (TYPE = JSON);

Это приводит к следующему виду вывода JSON:

{"city":"Salt Lake City","first_name":"Ryan","id":1,"last_name":"Dalton","state":"UT"}
{"city":"Birmingham","first_name":"Upton","id":2,"last_name":"Conway","state":"AL"}
{"city":"Columbus","first_name":"Kibo","id":3,"last_name":"Horton","state":"GA"}

Однако я бынравится вкладывать полученные объекты в массив JSON следующим образом:

[
    {"city":"Salt Lake City","first_name":"Ryan","id":1,"last_name":"Dalton","state":"UT"},
    {"city":"Birmingham","first_name":"Upton","id":2,"last_name":"Conway","state":"AL"},
    {"city":"Columbus","first_name":"Kibo","id":3,"last_name":"Horton","state":"GA"}
]

Возможно ли это?

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Я не думаю, что сегодня есть единственное отличное решение.

@ tgo ответ сработает, если ваш набор данных мал.Но если он большой, то созданный массив будет превышать предел снежинки 16 МБ, и запрос не будет выполнен.

I ненавижу , чтобы предположить это, но если вам действительно нужно этоПросто создайте JSON самостоятельно, что-то вроде этого

COPY INTO @%mytable FROM (
  SELECT '['
  UNION ALL
  SELECT TO_JSON(OBJECT_CONSTRUCT(
         'id', id, 'first_name', first_name,
         'last_name', last_name, 'city', city, 'state', state
       ))
       || ',' 
       as objs FROM mytable
  UNION ALL
  SELECT ']'

)
FILE_FORMAT = (TYPE = CSV)

Одна ошибка: последняя строка в вашем результате JSON будет иметь в конце завершающий , - в зависимости от того, что вы используете для его анализа,может сработать или нет.Если нет, вы можете вставить дополнительное конечное значение, например, null, если это не больно.

0 голосов
/ 01 ноября 2018

У меня нет доступа к учетной записи типа «снежинка» в данный момент, поэтому я прошу прощения за непроверенное решение :( Я думаю, что вы ищете array_construct, который вы можете прочитать здесь

Я ожидаю, что что-то подобное может сработать

COPY INTO @%mytable
  FROM (
    SELECT ARRAY_CONSTRUCT(objs)
    FROM (
       SELECT OBJECT_CONSTRUCT(
         'id', id, 'first_name', first_name,
         'last_name', last_name, 'city', city, 'state', state
       ) as objs FROM mytable
    )
  )
  FILE_FORMAT = (TYPE = JSON);
...