Google BigQuery: загрузите результат ExecuteQuery в Google Cloud Storage в формате json

Я импортирую таблицу bigquery, которая содержит повторяющиеся записи. Мне нужно загрузить эти записи в облачное хранилище Google. Как я могу преобразовать результат в формат json, чтобы сохранить его в облаке Google?

Ниже мой код:

  BigQueryClient Client = BigQueryClient.Create("test", _googleCredential)

   string query = @"select * from `projecttest.TestDataset.CostData`";

 result = Client.ExecuteQuery(query, parameters: null, queryOptions: new QueryOptions { UseLegacySql = false });

person Mayank    schedule 14.08.2018    source источник


Ответы (2)


Как я вижу, вы делаете это для всей таблицы - вам лучше использовать задание экспорта в формате JSON.

person Mikhail Berlyant    schedule 14.08.2018
comment
Благодарим вас за ответ. Не могли бы вы предоставить документ для использования задания экспорта с использованием C #. Вы ссылаетесь на метод ExportJsonToGcs в - person Mayank; 14.08.2018
comment
Мне нужно импортировать таблицы с подстановочными знаками, в которых есть повторяющиеся записи. Поэтому было бы сложно создавать json каждый год, обрабатывая каждую строку / столбец. Есть ли у нас способ пропустить создание json вручную? - person Mayank; 14.08.2018
comment
Конечно. вы можете попробовать этот метод (я больше не являюсь специалистом по C #, поэтому не могу точно сказать - связанный api здесь, и вам не нужно устанавливать схему при экспорте - см. здесь для установки обязательных атрибутов. также - важно - SELECT * оплачивается сканирование всей таблицы по сравнению с бесплатным экспортом - person Mikhail Berlyant; 14.08.2018

Вы можете использовать функцию Экспорт табличных данных BigQuery, которую можно реализовать для экспорта ваших данные таблиц из BigQuery в GCS в нескольких форматах, например Форматы экспорта JSON, CSV и Avro.

Предлагаю вам ознакомиться с Экспорт данных, хранящихся в BigQuery официальная документация, которая содержит несколько полезных примеров для отправки задания по извлечению через API, веб-интерфейс, командную строку и клиентские библиотеки в случае, если вы используете определенный язык программирования, как показано в следующем примере кода C #:

public void ExportJsonToGcs(
    string datasetId, string tableId, string bucketName, string fileName,
    BigQueryClient client)
{
    StorageClient gcsClient = StorageClient.Create();
    string contentType = "application/json";
    // Get Table and append results into StringBuilder.
    PagedEnumerable<TableDataList, BigQueryRow> result = client.ListRows(datasetId, tableId);
    StringBuilder sb = new StringBuilder();
    foreach (var row in result)
    {
        sb.Append($"{{\"title\" : \"{row["title"]}\", \"unique_words\":\"{row["unique_words"]}\"}}{Environment.NewLine}");
    }
    // Save stream to Google Cloud Storage.
    using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(sb.ToString())))
    {
        var obj = gcsClient.UploadObject(bucketName, fileName, contentType, stream);
    }
}
person Armin_SC    schedule 14.08.2018
comment
Я видел этот код, но мне нужно загрузить таблицу, в которой есть тип данных записи. Возможно ли импортировать эти таблицы? - person Mayank; 14.08.2018
comment
Согласно документации Указание вложенных и повторяющихся столбцов, у вас не должно быть проблема с загрузкой таблиц с RECORD типами данных, поскольку BigQuery поддерживает вложенные и повторяющиеся данные из исходных форматов, которые поддерживают объектно-ориентированные схемы, например файлы JSON. - person Armin_SC; 14.08.2018
comment
Если мне нужно загрузить n таблиц, то не рекомендуется вручную указывать схему для каждой таблицы. - person Mayank; 16.08.2018
comment
Я согласен. Ссылка на вложенные и повторяющиеся столбцы была упомянута, чтобы указать на поддержку RECORD и STRUCT типов данных. Исходя из этого, вы сможете без проблем использовать функцию BigQuery Экспорт табличных данных при обработке этих записей. - person Armin_SC; 16.08.2018
comment
Однако, поскольку вы не можете экспортировать данные из нескольких таблиц в одном задании экспорта, я думаю, вы могли бы получить список таблиц BigQuery и использовать его для перемещения ваших таблиц одну за другой в / из GCS, добавив автоматическое определение схемы при загрузке их в BigQuery для автоматического определения типов данных полей. - person Armin_SC; 16.08.2018