Как экспортировать таблицу GA360 из большого запроса в snowflake через GCS в виде файла json без потери данных?

#json #google-analytics #google-bigquery #snowflake-cloud-data-platform #data-extraction

#json #google-analytics #google-bigquery #snowflake-cloud-data-platform #извлечение данных

Вопрос:

Я экспортирую таблицу GA360 из большого запроса в snowflake в формате json, используя команду bq cli. Я теряю некоторые поля, когда загружаю их как таблицу в snowflake. Я использую команду copy для загрузки моих данных json с внешнего этапа GCS в snowflake в таблицы snowflake. Но мне не хватает некоторых полей, которые являются частью вложенного массива. Я даже пытался сжать файл при экспорте в gcs, но я все еще теряю данные. Может кто-нибудь подсказать мне, как я могу это сделать. Я не хочу сглаживать таблицу в bigquery и передавать ее. Мой ежедневный размер таблицы составляет от 1,5 ГБ до максимум 4 ГБ.

 bq extract 
  --project_id=myproject 
  --destination_format=NEWLINE_DELIMITED_JSON 
  --compression GZIP 
  datasetid.ga_sessions_20191001 
gs://test_bucket/ga_sessions_20191001-*.json
  

Я настроил свою интеграцию, формат файла и этап в snowflake. Я копирую данные из этой корзины в таблицу с одним полем variant. Количество строк совпадает с большим запросом, но поля отсутствуют.
Я предполагаю, что это связано с ограничением, которое имеет snowflake, где каждый столбец variant должен иметь размер 16 МБ. Есть ли какой-нибудь способ сжать каждое поле варианта до размера менее 16 МБ?

Комментарии:

1. Какие поля вам не хватает?

2. Мне не хватает hits.transaction и всей его структуры @FelipeHoffa

Ответ №1:

У меня не было проблем с экспортом GA360 и получением полных объектов в Snowflake.

Сначала я экспортировал демонстрационную таблицу bigquery-public-data.google_analytics_sample.ga_sessions_20170801 в GCS в формате JSON.

Затем я загрузил его в Snowflake:

 
create or replace table ga_demo2(src variant);

COPY INTO ga_demo2
FROM 'gcs://[...]/ga_sessions000000000000'
FILE_FORMAT=(TYPE='JSON');
  

А затем найти идентификаторы транзакций:

 SELECT src:visitId, hit.value:transaction.transactionId
FROM ga_demo1, lateral flatten(input => src:hits) hit
WHERE src:visitId='1501621191'
LIMIT 10
  

введите описание изображения здесь

Интересные вещи, на которые стоит обратить внимание:

  • Я легко читаю файлы GCS из Snowflake, развернутые в AWS.
  • Манипулирование JSON в Snowflake действительно круто.

См https://hoffa.medium.com/funnel-analytics-with-sql-match-recognize-on-snowflake-8bd576d9b7b1 для большего.

Комментарии:

1. тот же результат для файла размером более 16 МБ?

2. Размер этого файла превышает 16 МБ. Если у вас это не работает, можете ли вы поделиться со мной воспроизводимым примером?

3. просто проверял, связана проблема с ограничением в 16 МБ или нет, как упоминал ОП в последней строке своего вопроса.

4. Правильно! Я пропустил эту часть вопроса, спасибо, что подняли его. Я перепроверю. Кстати, мне было бы очень странно, что размер исходных данных превышает сжатие в 16 МБ, поэтому, надеюсь, они смогут предоставить воспроизводимый пример.

5. (обратите внимание, что ограничение на сжатие в 16 МБ в этом случае относится к строке, а не к файлу)