Перечислите все таблицы в наборе данных в bigquery с помощью bq CLI и сохраните их в облачном хранилище Google

У меня есть около 108 таблиц в наборе данных. Я пытаюсь извлечь все эти таблицы, используя следующий скрипт bash:

# get list of tables
tables=$(bq ls "$project:$dataset" | awk '{print $1}' | tail +3)

# extract into storage
for table in $tables
do
    bq extract --destination_format "NEWLINE_DELIMITED_JSON" --compression "GZIP" "$project:$dataset.$table" "gs://$bucket/$dataset/$table.json.gz" 
done

Но похоже что bq ls показывать только около 50 таблиц одновременно, и в результате я не могу извлечь их в облачное хранилище.

В любом случае я могу получить доступ ко всем 108 таблицам, используя bq ls команда?

3 ответа

Решение

Количество строк по умолчанию при перечислении таблиц, которые bq ls будет отображаться 100. Вы можете изменить это с параметром командной строки --max_results или же -n,

Вы также можете установить значения по умолчанию для bq в $HOME/.bigqueryrc,

Добавление флагов в.bigqueryrc

Я пробовал с CLI, и эта команда сработала для меня:-

bq ls --max_results 1000 'project_id:dataset'

Примечание: --max_results number_based_on_Table_count

Это возьмет все представления и m/views для вашего набора данных и поместит их в файл.

Можно добавить еще один цикл, чтобы перебирать все наборы данных.

      #!/bin/bash

## THIS shell script will pull down every views SQL in a dataset into its own file

# Get the project ID and dataset name
DATASET=<YOUR_DATASET>

# for dataset in $(bq ls --format=json | jq -r '.[] | .dataset_id'); do
    # Loop over each table in the dataset
    for table in $(bq ls --max_results 1000 "$PROJECT_ID:$DATASET" | tail -n +3 | awk '{print $1}'); do

        # Determine the table type and file extension
        if bq show --format=prettyjson $DATASET.$table | jq -r '.type' | grep -q -E "MATERIALIZED_VIEW|VIEW"; then
            file_extension=".bqsql"
                # Output the table being processed
            echo "Extracting schema for $DATASET.$table"

            # Get the schema for the table
            bq show --view --format=prettyjson $DATASET.$table | jq -r '.view.query' > "$DATASET-$table.$file_extension"
        else
            echo "Ignoring $table"
            continue
        fi
    done
# done
Другие вопросы по тегам