sql server bcp ホストのデータファイルが開けません 指定先、フォルダーを生成しておくこと bcp mydb . dat - n - k - T - b 10000 - S localhost - … bcp [Database1].[dbo]. 今、会社で開発をしているのだけど自宅でも作業ができるように環境の構築を行いたい。記事タイトルそのままだけれども、まずはDBからデータをエクスポートする手順を確認しておきたいので、ざっくりと作業工程をまとめてみた。, ベースとなる環境は直ぐに構築できるが、DB環境の構築が結構面倒なのではないだろうか。しかし、DB環境にデータが存在しないと動かしても結果がよくわからないし。, ①「すべてのプログラム」⇒「SQLServer」⇒「データのインポートおよびエクスポート」を選択すると、ウィザードが立ち上がる。, 全ては時の中に… : 【SQL Server】BCPコマンドを利用したデータのインポート/エクスポート, ひと目でわかる SQL Server 2012 (TechNet ITプロシリーズ), 絵で見てわかるSQL Serverの内部構造 (DB Magazine SELECTION), 26歳からIT業界にいるエンジニアが、まったく成長できてないことを確認するブログ。備忘録的に使いたいとも考えています。, starscream1999さんは、はてなブログを使っています。あなたもはてなブログをはじめてみませんか?, Powered by Hatena Blog mytable out C : \ workspace \ BcpData \ mydb \ mytable . sql server - 高速化 ... テーブルを可能な限り小さなファイルにエクスポートする場合は、ネイティブ形式にします。 ... BCPカウンタ変数が4バイトの整数なので、2,147,483,647を超えるレコードに対してBCPを使用することはできません。 sql server bcp ユーティリティのエクスポートする方法(文字コード utf-8) 前提事項:sql-server 2014 sp2 以降 または sql-server 2016 で対応 sql-server 2014 sp1 以前の場合、 プログラムやスクリプト(下記サンプル)でテキストファイルをutf 私は500ミリオン以上の行を処理できる(妥当な時間に列のインデックスを作成し、3秒未満で選択クエリの結果を提供する)データベースを探しています。 ローエンドマシン(Core 2 CPU 6600、4GB、64ビットシステム、Windows VISTA)上のPostgresqlまたはMsqlは、このような多数の行を処理するでしょうか?, 更新:この問題を尋ねると、where節で指定された1つまたは2つのフィールドを持つ質問を選択するために、ローエンドのマシンで使用するデータベースの情報を探しています。 結合はありません。 私はインデックスを作成する必要があります - それは、mysqlのような年齢を取ることはできません - 私の選択クエリのための十分なパフォーマンスを達成する。 このマシンは実験を行うためのテストPCです。, MSSQLは多くの行をうまく処理できます。 クエリ時間は、単なる行カウント以外の多くの要素に完全に依存しています。, 小さな(10,000行未満の)テーブルを作成するのは非常に簡単です。クエリを実行するのに数分かかることがあります。 たとえば、たくさんの結合、where句の関数、および512MBの合計RAMを持つAtomプロセッサのゼロインデックスを使用します。 ;), インデックスと外部キーの関係がすべて良好であること、不要な関数呼び出しを排除して実際に必要なデータのみを返すようにクエリが最適化されていることを確認するにはもう少し作業が必要です。 また、高速なハードウェアが必要です。, それは、あなたが費やしたい金額、開発チームの質、およびあなたが扱っているデータ行のサイズにまで及ぶ。, ここでの情報の量は、実際の世界の答えを与えるにはまだ十分ではありません。 あなたはそれをテストし、必要に応じてデータベースの設計とハードウェアを調整するだけです。, たとえば、これらの仕様を持つマシン上のテーブルに10億行を簡単に置くことができ、「tableA(nolock)からトップ(1)IDを選択」クエリを実行し、ミリ秒単位で回答を得ることができます。 同様に、「select * from tablea」クエリを実行することもできますが、クエリーは迅速に実行されますが、ワイヤを介してすべてのデータを転送するにはしばらく時間がかかります。, ポイントは、テストする必要があります。 つまり、サーバーを設定し、テーブルをいくつか作成し、それらのテーブルを作成します。 次に、クエリとインデックスを正しく取得するためにパフォーマンスチューニングを行う必要があります。 パフォーマンスチューニングの一環として、クエリをどのように再構成する必要があるかだけでなく、ロックに基づいてマシンのどの部分を置き換える必要があるか(つまりディスク、RAM、CPUなど)を明らかにする予定ですおよび待機タイプ。, 私はあなたのためにこれを行うために、1つまたは2つのDBAを雇う(または契約する)ことを強くお勧めします。, あなたが見たいのは、データベースソフトウェアが課すテーブルサイズの制限です。 たとえば、この記事の執筆時点では、 MySQL InnoDBのテーブルあたりの制限は64 TBです が、PostgreSQLの テーブルあたり の制限は32 TBです。 どちらもテーブルあたりの行数を制限しません。 正しく構成されていれば、これらのデータベースシステムでは、5億個の行はもちろんのこと、各行が十分に小さい場合は、何十億行もの行を処理するのに問題はありません。, 非常に大量のデータを処理する最高のパフォーマンスを得るには、十分なディスク容量と優れたディスク性能(適切なRAIDのディスクと大量のメモリを高速プロセッサと組み合わせて実現できるディスク性能が必要です)が理想的ですインテルXeonまたはAMD Opteronプロセッサ)。 言うまでもなく、データベースシステムが最適なパフォーマンスを得るように構成されており、テーブルのインデックスが正しく作成されていることを確認する必要があります。, すでに述べたように、今日のDBはすべてこのような状況に対応できます。集中したいのは、ディスクI / Oサブシステムです。 RAID 0またはRAID 0 + 1の状況をできる限り多くのスピンドルをスローするように構成する必要があります。 また、パフォーマンスのためにLog / Temp / Data論理ドライブを分割します。, たとえば、12台のドライブがあるとします。RAIDコントローラには、それぞれ4台のドライブで3つのRAID 0パーティションを作成します。 Windowsでは、各グループを論理ドライブ(G、H、I)としてフォーマットします - SQL Serverを構成するとき(ここで言えば)、tempdbをGに割り当て、ログファイルをHに、データファイルをIに割り当てます。, ほとんどすべての非愚かなデータベースは今日10億行を簡単に処理できます。 32ビットシステムでも5億も可能です(64ビットが本当に助けになります)。, PostgresとMysqlはどちらも簡単に5億行を処理できます。 適切なハードウェア上。, 次の記事では、Microsoft SQLで160億行のテーブルのインポートと使用について説明します。 http://sqlmag.com/t-sql/adventures-big-data-how-import-16-billion-rows-single-table 。, 定義されたクラスタード・インデックスを持つテーブルのデータが多いほど、ソートされていないレコードをインポートする速度が遅くなります。 ある時点では、それは実用的には遅すぎる。 テーブルを可能な限り小さなファイルにエクスポートする場合は、ネイティブ形式にします。 これは、文字データよりもバイナリフィールドでよりコンパクトに表現されるため、ほとんどの数値カラムを含むテーブルで最も効果的です。 すべてのデータが英数字であれば、それをネイティブ形式でエクスポートしてもほとんど得られません。 数値フィールドにNULLを許可しないと、データをさらにコンパクトにすることができます。 フィールドにNULLを設定できるようにすると、フィールドのバイナリ表現には、データのバイト数が続くことを示す1バイトのプレフィックスが含まれます。 BCPカウンタ変数が4バイトの整数なので、2,147,483,647を超えるレコードに対してBCPを使用することはできません。 私はMSDNまたはインターネット上でこれに関する参照を見つけることができませんでした。 あなたのテーブルが2,147,483,647以上のレコードで構成されている場合は、それをチャンクでエクスポートするか、独自のエクスポートルーチンを作成する必要があります。 あらかじめ用意されたテーブルにクラスタード・インデックスを定義すると、大量のディスク・スペースが必要になります。 私のテストでは、ログは完成前に元のテーブルサイズの10倍にまで爆発しました。 BULK INSERTステートメントを使用して多数のレコードをインポートする場合は、BATCHSIZEパラメーターを組み込み、一度にコミットするレコードの数を指定します。 このパラメータを指定しないと、ファイル全体が単一のトランザクションとしてインポートされるため、多くのログ領域が必要になります。 クラスタ化インデックスを使用してテーブルにデータを取得する最速の方法は、まずデータを事前に並べ替えることです。 その後、ORDERパラメーターを指定したBULK INSERTステートメントを使用してインポートすることができます。, これは、SQL Server上に数十ペタバイト(数千テラバイト)、何十億行もの行を格納するマルチペタバイトのNasdaq OMXデータベースと比較しても小さいです。, 私は、使用するのに最適なシステムが何であるかについて多くの情報を持っていませんが、このヒントは、あなたが探しているスピードの一部を得るのを助けるかもしれません。, 長いvarchar文字列、特にインデックスに許可されている文字列よりも長い文字列を完全に一致させる場合は、あらかじめ計算されたハッシュの並べ替えを行うことができます。, 完全一致をしていない場合、これはあなたを助けませんが、その場合は全文索引を調べることができます。 これにより、5億行のテーブルのルックアップの速度が実際に変わります。, http://sqlmag.com/t-sql/adventures-big-data-how-import-16-billion-rows-single-table.