web-dev-qa-db-ja.com

Azureに単一の大きなテーブルをインポートする

Azure SQL ServerにMyDbという既存のDBがあります。複数のテーブルを含む別のDBのバックパックがあります。専用のテーブル_MyDb.dbo.ImportedTable_に1つのテーブルをインポートすることに興味があります(そのテーブルにはFKがなく、簡単にできます)。最終的な目標は、そのテーブルを使用してデータを再構築できるようにすることです。

問題は:

  • _MyDb.dbo.ImportedTable_は最大60 Gbです
  • そのテーブルのメイン列はNVARCHAR(MAX)です。そのため、AzureでElasticクエリを使用することはできません。それはタイムアウトします Elasticクエリは嫌いなのでNVARCHAR(4000)よりも大きいもの(私は試しました)

1. BCPを使用しますが、bacpacアーカイブ内にあるバイナリー_*.bcp_ファイル(15'000)しかありません( Zip、データフォルダ内)

しかし、特にbacpacで使用されている_*.bcp_ファイル形式に関するドキュメントが見つからないため、これを機能させることができません。

tl; drAzure SQL Serverの既存のデータベースにmabacpacから単一の〜60Gbテーブルをインポートする良い方法は何ですか?

2
Askolein

.bacアーカイブ内の.bacpacファイルを単純に使用する方法はないようです。次に、bcpに戻して、別のbcpコマンドのソースとなるテキストファイルを作成し、新しいDBにインポートするデータを作成する必要がありました。

データをエクスポートしてファイルを作成するには:

bcp "SELECT * FROM $table WHERE someColumn = someValue" queryout "${table}.csv" -U $user -P $password -S $server -d $dbSource -N -k

そして、それを新しいテーブルとして再インポートする

bcp [$dbTarget].[dbo].[$table] IN "Fresh${table}.csv" -U $user -P $password -S $server -E -N -k

1
Askolein