MySQL で管理している全テーブルの名前とプライマリーキーを CSV に出力
MySQL で管理している全テーブルの名前とプライマリーキーを CSV に出力
RDS のデータを BigQuery にインポートしている。
RDSのデータをリストアRDSのデータをCSVで出力GCSにCSVをアップロードbq loadコマンドを利用してBigQueryにインポート
今回やること
MySQL で管理している全テーブルの名前とプライマリーキーを管理したいので CSV を生成する。
テーブル名とプライマリーキーを CSV に出力
MySQL Server に接続する場合
$ ./dump_tablenames.sh "mysql -u ${USERNAME} -p${DB_PASSWORD}" $DATASET_NAME
Amazon Aurora MySQL に接続する場合
$ ./dump_tablenames.sh "mysql -u ${USERNAME} -p${DB_PASSWORD} -h ${RDS_HOST_NAME} -P ${DB_PORT}" $DATASET_NAME
出力された CSV
articles,id
users,id
実装
dump_tablenames.sh
#!/bin/bash -xe
MYSQL=$1
DATASET_NAME=$2
# ./tablenames/${DATASET_NAME}_tablenames.csv を更新
dump_tablenames_query=$(cat ./sql/dump_tablenames.template.sql | DATASET_NAME=$DATASET_NAME envsubst)
$MYSQL -N -B -e "${dump_tablenames_query}" | sed 's/\t/,/g' > ./tablenames/${DATASET_NAME}_tablenames.csv
dump_tablenames.template.sql
PRIMARY KEY がないテーブルを考慮して、INFORMATION_SCHEMA.TABLES に対して LEFT JOIN している。
SELECT
TABLES.TABLE_NAME
, COLUMNS.PRIMAY_KEY
FROM INFORMATION_SCHEMA.TABLES AS TABLES
LEFT JOIN (
SELECT
TABLE_NAME
, COLUMN_NAME AS PRIMAY_KEY
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_SCHEMA = '${DATASET_NAME}'
AND COLUMN_KEY = 'PRI'
) AS COLUMNS
ON TABLES.TABLE_NAME = COLUMNS.TABLE_NAME
WHERE
TABLES.TABLE_SCHEMA = '${DATASET_NAME}'
