Перечислите все таблицы в наборе данных в 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
,
Я пробовал с 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