Как я могу автоматически создавать таблицы BigQuery из моей корзины Cloud Storage?

Я хочу создать работу, которая будет работать, скажем, в 2 часа ночи каждое утро. Это задание должно создать таблицу BigQuery, прочитав мои файлы из корзины Cloud Storage. Как я могу этого добиться?

Какой формат файла? Как вы генерируете имя таблицы? Сколько у вас файлов? Вы хотите добавить к существующим таблицам или усечь их?   —  person nsk    schedule 21.05.2020

Файлы экспортируются из хранилища (.export_metadata). Это мои экспортные подколлекции firestore. У меня есть 4 подколлекции. Каждая из этих подколлекций содержит по 419 документов. Я хочу обрезать существующую таблицу и перезагрузить ее.   —  person nsk    schedule 21.05.2020

См. также:  ошибка R10 при развертывании приложения Flask с докером на heroku
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. nsk

    Вы можете напрямую импортировать резервную копию хранилища данных в BigQuery. Настройте задание загрузки с исходным форматом, равным DATASTORE_BACKUP (да даже для firestore) и writeDisposition в WRITE_TRUNCATE

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

    ИЗМЕНИТЬ

    Вам необходимо импортировать эти зависимости в свой package.json.

        "@google-cloud/bigquery": "^4.7.0",
        "@google-cloud/storage": "^5.0.1",
    

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

    const {Storage} = require('@google-cloud/storage');
    const {BigQuery} = require('@google-cloud/bigquery');
    
    const bigquery = new BigQuery();
    const storage = new Storage();
    //
    const bucketName = "my_bucket" //to change
    const fileExport = "path/to/my_export.export_metadata" //to change
    const datasetId = "data" //to change
    const tableId = "dsexport" //to change
    exports.loadDSExport = async (req, res) => {
    
        // Configure the load job. For full list of options, see:
        // https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#JobConfigurationLoad
        const metadata = {
            sourceFormat: 'DATASTORE_BACKUP',
            autodetect: true,
            location: 'EU', // Set your correct region
            writeDisposition: "WRITE_TRUNCATE",
        };
    
        // Load data from a Google Cloud Storage file into the table
        const [job] = await bigquery
            .dataset(datasetId)
            .table(tableId)
            .load(storage.bucket(bucketName).file(fileExport), metadata);
        // load() waits for the job to finish
        // Can take time, increase function timeout if needed
    
        // Check the job's status for errors
        const errors = job.status.errors;
        if (errors && errors.length > 0) {
            //Handle error and return code here
            throw errors;
        }
    
        console.log(`Job ${job.id} completed.`);
        res.send(`Job ${job.id} completed.`);
    };
    

    А затем разверните свою функцию следующим образом (здесь, в частном режиме)

    gcloud beta functions deploy --runtime nodejs10 --trigger-http --entry-point loadDSExport --region europe-west1 loadDSExport
    

    Мне нужна помощь в написании облачной функции. Можете ли вы дать мне образец облачной функции, которую я могу использовать для выполнения команды bq load? Приведенная ниже команда bq load работает через интерфейс командной строки: bq —location = asia-east1 load \ —replace —source_format = DATASTORE_BACKUP \ firestore.nric_test \ gs: //gcp_firestore_ae1/export_20200521/all_namespaces/kind_nric_img_imgata_namespaces. person nsk; 21.05.2020

    Какой язык вы предпочитаете? Идти? Узел? Python? Скоро Java, но я тоже могу! person nsk; 21.05.2020

    Узел или Java в порядке person nsk; 22.05.2020

    Отредактировано версией Node @NehaShaikh person nsk; 22.05.2020

    Большое спасибо @guillaume blaquiere! person nsk; 23.05.2020

    есть идеи, как я могу запланировать ежедневное выполнение этой функции и экспорт данных в мой набор данных BigQuery в asia-east1? Мне нужно создать и запустить эту облачную функцию в местоположении asia-east1. Однако в настоящее время я вижу, что asia-east1 не поддерживается облачными функциями :( @guillaume blaquiere person nsk; 26.05.2020

    Вам все равно, где запускается функция! Функция просто запускает задачу BigQuery для импорта данных из GCS в таблицу. Расположение функции не имеет значения! person nsk; 26.05.2020

    У меня есть еще 2 вопроса: 1. Когда я тестирую приведенный выше код как облачную функцию, он выдает ошибку: Ошибка: выполнение функции не выполнено. Подробности: res.send не является функцией 2. Как настроить ежедневное выполнение этой функции? @guillaume blaquiere person nsk; 26.05.2020

    Как вы тестируете функцию? Локально? На облачной функции? Если на месте, вы можете показать мне, как вы это делаете? person nsk; 26.05.2020

    Я тестирую облачную функцию person nsk; 26.05.2020

    Он отлично работает на моей стороне. Вы уверены, что у вас нет ошибки? В моем примере это не рассматривается. person nsk; 26.05.2020

    После того, как я закомментирую строку: res.send (Job ${job.id} completed.); функциональный тест успешен для облачных функций person nsk; 26.05.2020

    Таблица BigQuery, созданная с помощью этой облачной функции, добавляет дополнительный ключ «. app ‘,’ ключ. путь ‘,’ ключ. kind ‘,’ ключ. имя ‘,’ ключ. id ‘для каждого из моих полей типа данных’ Record ‘. Все они имеют нули. Я не хочу иметь эти дополнительные поля для каждого типа данных «Запись». Есть ли способ удалить их из моей таблицы BigQuery? Подробную схему BigQuery см. На странице stackoverflow.com/questions/62254007. @guillaume blaquiere person nsk; 08.06.2020

    @guillaumeblaquiere могу ли я получить версию для Python? person nsk; 18.08.2020

    @soheshdoshi, Создайте новый вопрос и я смогу адаптировать код на Python. Это невозможно в комментариях, и это не связано с вопросом здесь! person nsk; 18.08.2020

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

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: