Изменение имени столбца в Google BigQuery во время загрузки

Вопрос или проблема

Изменение имени столбца в Google BigQuery во время загрузки

Я загружаю данные JSON в BigQuery. JSON содержит различные структуры, которые в свою очередь содержат ряд полей STRING. Я могу разобрать 99% того, что мне нужно, но застрял с одной из оставшихся колонок. Причина в том, что название колонки содержит и пробел, и дефис. Оба варианта недопустимы в BigQuery (до тех пор, пока гибкая поддержка именования колонок не выйдет на общий доступ).

Я загружаю данные в SQL с использованием такого подхода:

CREATE OR REPLACE EXTERNAL TABLE <proj>.<dataset>.<tablename> {
    teams_remove STRUCT<team_a STRING, team_b STRING, winning team STRING, losing-manager STRING>
)

Это всего лишь пример, чтобы показать синтаксис, с которым я работаю. В этом примере третья строка ‘winning team’ не сможет быть разобрана/загружена из-за пробела, а четвертая не загрузится из-за дефиса.

Существует ли способ переименовать колонку/поле во время загрузки?

К сожалению, я не могу предварительно обработать исходные данные, чтобы исправить названия колонок.

Спасибо!

Ответ или решение

К сожалению, в Google BigQuery нет прямого способа переименовать столбцы в структуре во время загрузки данных, если источником данных являются JSON файлы с неподходящими именами полей. Однако, вы можете использовать альтернативные методы, чтобы обойти это ограничение.

  1. Обработка с использованием SQL: Вы можете загрузить данные в промежуточную таблицу с помощью стандартных имен и сделать выборку из этой таблицы, переименовывая столбцы при использовании SQL. Например:
CREATE OR REPLACE TABLE `<proj>.<dataset>.<intermediate_table>` 
AS 
SELECT 
    teams_remove.team_a,
    teams_remove.team_b,
    teams_remove.`winning team` AS winning_team, 
    teams_remove.`losing-manager` AS losing_manager
FROM 
    `<proj>.<dataset>.<external_table>`;

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

  1. Использование внешних таблиц: Если вы не можете изменить источник данных, вы можете создать внешнюю таблицу, используя CREATE EXTERNAL TABLE и затем выполнять выборку с переименованием столбцов.

Пример создания внешней таблицы:

CREATE OR REPLACE EXTERNAL TABLE `<proj>.<dataset>.<external_table>` 
OPTIONS (
    format = 'JSON',
    uris = ['gs://path_to_your_file/*.json']
);

Затем вы можете обратиться к этой внешней таблице и переименовать столбцы в запросе, как показано выше.

  1. BigQuery Dataflow: Если у вас есть доступ к Google Cloud Dataflow, вы можете создать потоки обработки данных, которые могут помочь вам изменить имена полей при загрузке. Это может быть более сложный и занятный процесс, но он позволяет более гибко управлять данными перед загрузкой в BigQuery.

  2. Объединение с Python или другой языковой средой: Вы также можете использовать Python и библиотеку google-cloud-bigquery для загрузки данных, где вы можете обработать JSON и изменить имена колонок перед загрузкой.

В заключение, если напрямую переименовать столбцы в процессе загрузки невозможно, вы можете использовать промежуточные таблицы или другие средства обработки данных, чтобы обойти ограничение BigQuery и корректно загрузить ваши данные.

Оцените материал
Добавить комментарий

Капча загружается...