こんばんは。本日は、Azure SQL DatabaseにCSVファイルを一括登録する手段として、bcpコマンドを使った方法の手順を確認したので、メモとして残しておきます。
なお、このbcpコマンドはAzure SQL Databaseに限らずSQL Serverで共通して使えるコマンドなので、オンプレのSQL Serverなどに対しても使える手順です。(昨今はAzure SQL Databaseを使うケースが多いだろうなぁと思いこういうタイトルにしています)
それではまいります。
Contents
bcpコマンドとは
こちらにまとめました。
Azure SQL Databaseに対してbcpコマンドでCSV/TXTデータを一括登録する
前提
・クライアント端末側でbcpコマンドが使えるようになっていること。bcpコマンドは、以下リンクからsqlcmdユーティリティをインストールすることで使えるようになります。
https://docs.microsoft.com/ja-jp/sql/tools/sqlcmd-utility?view=sql-server-ver15&preserve-view=true
・Azure SQL Databaseリソースが存在していること
手順
ありがたいことに、Microsoftの公式ドキュメントに説明がのっていましたので、この通り進めてみます。
https://docs.microsoft.com/ja-jp/azure/azure-sql/load-from-csv-with-bcp#3-load-the-data
準備:ターゲットテーブルの作成
bcpユーティリティを含んでいるsqlcmdを使うと、リモートからテーブルの作成が行えます。今回は、お試しなので、テーブルを作るところから試してみました。
以下コマンドを実行します。
*コマンドプロンプトからこの通り実行すると改行でクエリが分断されて認識されてエラーがでてしまったので、対処療法的には改行を消して実行するとうまくいくと思います。
sqlcmd.exe -S <server name> -d <database name> -U <username> -P <password> -I -Q "
CREATE TABLE DimDate2
(
DateId INT NOT NULL,
CalendarQuarter TINYINT NOT NULL,
FiscalQuarter TINYINT NOT NULL
)
;
"
クエリ実行後、Azure SQL Database上にテーブルが作成されたことを確認します。(ツールはなんでもよいですが、今回はAzure Data Studioを使っています)
準備:ローカルでアップロード用ファイルを作成
手順の通り、アップロード用データを作成します。今回は、.txt形式で作成します。
bcpコマンドによる一括インサート
以下コマンドを実行します。
bcp DimDate2 in C:\Temp\DimDate2.txt -S <ServerName> -d <DatabaseName> -U <Username> -P <password> -q -c -t ,
すると、一瞬でデータが入りました。(今回は12行だけですしね・・)
データ登録完了確認
最後に、またローカルからsqlcmdを使って、Azure SQL Databaseにデータが正常に登録されたことを確認します。
sqlcmd.exe -S <server name> -d <database name> -U <username> -P <password> -I -Q "SELECT * FROM DimDate2 ORDER BY 1;"
以上、とても簡単に実現することができました・・・!
Azure SQL Databaseにデータを一括インポートする他の方法
今回、bcpコマンドによる方法を試してみましたが、他にもSQL ServerのBULK INSERT T-SQLを使う方法もあります。また、そちらの方が高速にインポートできるとの実験結果もありますので、そのあたり含めて以下の記事で紹介しています。
こちらも参考になりましたら幸いです。
コメントを残す