Google Apps Script - Как передавать данные JSON в BigQuery? - PullRequest
0 голосов
/ 20 сентября 2019

В этой ссылке https://developers.google.com/apps-script/advanced/bigquery,

Чтобы загрузить данные CSV в BigQuery, они используют:

var file = DriveApp.getFileById(csvFileId);
  var data = file.getBlob().setContentType('application/octet-stream');

  // Create the data upload job.
  var job = {
    configuration: {
      load: {
        destinationTable: {
          projectId: projectId,
          datasetId: datasetId,
          tableId: tableId
        },
        skipLeadingRows: 1
      }
    }
  };
  job = BigQuery.Jobs.insert(job, projectId, data);

Как я понимаю, они отправляют BLOB-объект BigQuery file.getBlob().setContentType('application/octet-stream');,что не дружелюбно

Как отправить JSON в BigQuery в Apps Script?

С библиотекой @google-cloud/bigquery (используется в проекте вне Apps Script),Я могу сделать что-то вроде этого:

https://cloud.google.com/bigquery/streaming-data-into-bigquery#streaminginsertexamples

// Import the Google Cloud client library
const { BigQuery } = require('@google-cloud/bigquery')
const moment = require('moment')

exports.insertUsageLog = async (userId) => {
  const datasetId = 'usage'
  const tableId = 'logs'
  const rows = [
    // The JSON data is collected here
    {
      timestamp: moment.utc().toISOString(),
      userId,
      // Something else ...
    },
  ]

  // Create a client
  const bigqueryClient = new BigQuery()

  // Insert data into a table
  await bigqueryClient
    .dataset(datasetId)
    .table(tableId)
    .insert(rows)
  console.log(`Inserted ${rows.length} rows`)
}

1 Ответ

2 голосов
/ 20 сентября 2019

Данные, загружаемые в BigQuery.Jobs.insert(), должны быть BLOB-объектами.

Вы можете создать этот BLOB-объект из содержимого CSV или символа новой строки JSON .JSON с разделителями-символами новой строки - это отдельная форма JSON, которая требуется BigQuery .Это изначально не поддерживается Apps Script.Однако вы должны иметь возможность преобразовать стандартный JSON в этот формат, создав пользовательскую функцию replacer и передав ее в качестве параметра JSON.stringify().В качестве альтернативы, вы можете использовать существующую библиотеку Javascript (вы можете найти что-то с помощью NPM или просто выполнить поиск в Github).

Как только вы сгенерировали JSON с разделителем новой строки (как либострока или байтовый массив) вам нужно преобразовать его в BLOB-объект, используя Utilities.newBlob() и передать его методу BigQuery.Jobs.insert().

...