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}'