Extract all tables from a BigQuery Firebase export using the BQ command line tool
Thu, 14 February 2019
extract_all_tables.sh
#!/usr/bin/env bash
DATASET_NAME="<DATASET NAME HERE>"
BUCKET_NAME="gs://<BUCKET NAME HERE>"
# Don't touch below.
BUCKET_BASE_PATH="gs://${BUCKET_NAME}/"
TABLE_LIST_FILE_NAME="/tmp/bq-extract-${DATASET_NAME}.txt"
rm ${TABLE_LIST_FILE_NAME} | grep "Added for failure suppression"
echo "Starting: Reading tables from ${DATASET_NAME}"
EXPORTED=$(bq ls -a -n 1000 ${DATASET_NAME} > ${TABLE_LIST_FILE_NAME})
echo "Finished: Reading tables from ${DATASET_NAME}"
trim() {
local trimmed="$1"
while [[ $trimmed == ' '* ]]; do
trimmed="${trimmed## }"
done
while [[ $trimmed == *' ' ]]; do
trimmed="${trimmed%% }"
done
echo "$trimmed"
}
EMPTY_SPACE=""
while IFS='' read -r SINGLE_LINE || [[ -n "$SINGLE_LINE" ]]; do
if [[ "$SINGLE_LINE" == *"events_"* ]]; then
if [[ "$SINGLE_LINE" != *"intraday_"* ]]; then
SINGLE_LINE=${SINGLE_LINE//TABLE/$EMPTY_SPACE}
SINGLE_TABLE=$(trim "${SINGLE_LINE}")
echo "Starting: Table ${SINGLE_TABLE}"
COMMAND="bq extract --destination_format NEWLINE_DELIMITED_JSON --compression GZIP "${DATASET_NAME}.${SINGLE_TABLE}" ${BUCKET_BASE_PATH}${SINGLE_TABLE}_*.json.gzip"
$(${COMMAND})
echo "Finished: Table ${SINGLE_TABLE}"
fi
fi
done < "${TABLE_LIST_FILE_NAME}"
rm ${TABLE_LIST_FILE_NAME}