Q&A
実現したいこと
・シェルスクリプトで二つのデータを結合後、そのデータをmysqlにインポートしたい。
前提
現在シェルスクリプトにて、DB上のデータを丸ごと入れ替えるスクリプトを作成しています。
主な処理の流れとしては、以下の通りです。
1.mysqlに接続(ユーザー情報などは外出し)
2.DB上に既に存在しているデータをトランケート
3.同一テーブルから更新区分と追加区分に分けたデータを結合(キーは同じだけど値はマッチしない)
4.mysqlコマンドを実行して任意のテーブルにインポート
該当のソースコード
#!/bin/bash # 定数の定義 readonly MYSQL_SCHEMA="test" readonly ROOT_DIRECTORY="〇〇〇/info.conf" readonly CMD_MYSQL="mysql --defaults-file=$ROOT_DIRECTORY/info.conf -t $MYSQL_SCHEMA" readonly INSERT=加工されたデータのファイルパス readonly INSERT_1=加工されたデータのファイルパス readonly REPLACE=加工されたデータのファイルパス readonly REPLACE_1=加工されたデータのファイルパス #テーブル削除 truncateSqlTable="TRUNCATE TABLE table_name;" truncateSqlTable_1="TRUNCATE TABLE table_name;" #テストデータ統合処理 ImportFile=`cat {$INSERT}{$REPLACE} > import.csv` ImportFile_1=`cat {$INSERT_1}{$REPLACE_1} > import_1.csv` #データベースインポート処理 loadSql="LOAD DATA LOCAL INFILE \"${ImportFile}\" INTO TABLE "table_name" FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"';" loadSql_1="LOAD DATA LOCAL INFILE \"${ImportFile_1}\" INTO TABLE "table_name" FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"';" #sql実行 mysql -e "{$CMD_MYSQL}${truncatesqlTable}${truncatesqlTable_1}${loadsql}${loadsql_1}"
試したこと
結合する部分にて、物理名は同じだが値が異なるのでcatコマンド以外に思いつきませんでした。
ソース自体へのアドバイスや良い結合の仕方などをご教示頂きたいです。
補足情報
テーブル名や変数名などは適当に伏せるためにつけました。
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2023/03/22 15:03
2023/03/22 16:12
2023/03/23 13:27