MySQL Shell import_table データのインポート1. import_tableの紹介この号では、MySQL Shell ツールセットの効率的なデータインポートツール、import_table を紹介します。このツールの正式名称は Parallel Table Import Utility です。名前が示すように、同時データインポートをサポートします。このツールは、MySQL Shell バージョン 8.0.23 以降でより完全な機能を備えています。以下に、このツールのコア機能を示します。
2. データのロードとテーブル関数のインポートの例このセクションでは、テーブルのインポートやデータのロードと同じ機能のコマンド例を示します。MySQL データのロードの包括的なシナリオを示すために、employees テーブルのサンプル データを例として引き続き使用します。
サンプルデータは次のとおりです。 [root@10-186-61-162 tmp]# cat employees_01.csv 「10001」、「1953-09-02」、「ゲオルギ」、「ファチェッロ」、「M」、「1986-06-26」 "10003","1959-12-03","Parto","Bamford","M","1986-08-28" 「10002」、「1964-06-02」、「ベザレル」、「ジンメル」、「F」、「1985-11-21」 「10004」、「1954-05-01」、「クリスチャン」、「コブリック」、「M」、「1986-12-01」 「10005」、「1955-01-21」、「京一」、「マリニアック」、「M」、「1989-09-12」 "10006","1953-04-20","アンネケ","プロイジグ","F","1989-06-02" "10007","1957-05-23","ツヴェタン","ジエリンスキー","F","1989-02-10" 「10008」、「1958-02-19」、「サニヤ」、「カルーフィ」、「M」、「1994-09-15」 「10009」、「1952-04-19」、「スマント」、「ピース」、「F」、「1985-02-18」 「10010」、「1963-06-01」、「ドゥアンケオ」、「ピヴェトー」、「F」、「1989-08-24」 テーブル構造の例: 10.186.61.162:3306 従業員 SQL > desc emp; +-------------+---------------+------+-----+--------+-------+ | フィールド | タイプ | Null | キー | デフォルト | 追加 | +-------------+---------------+------+-----+--------+-------+ | emp_no | int | NO | PRI | NULL | | | 生年月日 | 日付 | NO | | NULL | | | first_name | varchar(14) | NO | | NULL | | | last_name | varchar(16) | NO | | NULL | | | full_name | varchar(64) | YES | | NULL | | -- テーブルに新しく追加されたフィールドですが、エクスポートされたデータ ファイルには存在しません | gender | enum('M','F') | NO | | NULL | | | hire_date | 日付 | NO | | NULL | | | modify_date | datetime | YES | | NULL | | -- エクスポートされたデータ ファイルに存在しない新しいフィールドがテーブルに追加されます| delete_flag | varchar(1) | YES | | NULL | | -- エクスポートされたデータ ファイルに存在しない新しいフィールドがテーブルに追加されます+-------------+---------------+------+------+--------+--------+ 2.1 Load Dataを使用したデータのインポート'/data/mysql/3306/tmp/employees_01.csv' ファイルにデータをロードします。 employees.emp テーブルに 文字セット utf8mb4 フィールドは ',' で終了します '"' で囲まれている '\n' で終了する行 (@C1、@C2、@C3、@C4、@C5、@C6) emp_no=@C1 に設定し、 生年月日=@C2, first_name=大文字(@C3)、 last_name=小文字(@C4)、 フルネーム=concat(名,' ',姓), 性別=@C5, 雇用日=@C6、 修正日 = now(), delete_flag=if(hire_date<'1988-01-01','Y','N'); 2.2 import_tableを使用したデータのインポートutil.import_table( [ "/data/mysql/3306/tmp/employees_01.csv", ]、 { 「スキーマ」: 「従業員」、 "テーブル": "emp", 「方言」: 「csv-unix」、 "行をスキップ": 0, "showProgress": 真、 "文字セット": "utf8mb4", "columns": [1,2,3,4,5,6], ## ファイル内の列と同じ数のシリアル番号を使用します "decodeColumns": { "emp_no": "@1"、##はファイル「birth_date ":"@2 "の最初の列に対応します。 name ":" concat(@3、 ''、@4) "、##ファイルの3列目と4番目の列を1つの列にマージして、テーブル「ジェンダー」:"@5 "でフィールド値を生成します。 delete_flag ":" if(@6 <'1988-01-01'、 'y'、 'n') "##ファイルの6番目の列に基づいて論理的な判断を下し、テーブルで対応するフィールド値を生成します} }) 3. import_table固有の機能3.1 複数ファイルのインポート(ファジーマッチング)## インポートする前に、3 つの個別の従業員ファイルを生成し、エクスポートされた構造は一貫しています [root@10-186-61-162 tmp]# ls -lh 総使用量: 1.9G -rw-r----- 1 mysql mysql 579 3月24日 19:07 employees_01.csv -rw-r----- 1 mysql mysql 584 3月24日 18:48 employees_02.csv -rw-r----- 1 mysql mysql 576 3月24日 18:48 employees_03.csv -rw-r----- 1 mysql mysql 1.9G 3月26日 17:15 sbtest1.csv ## インポートコマンド。employees_* はあいまい一致に使用されます util.import_table( [ "/data/mysql/3306/tmp/employees_*", ]、 { 「スキーマ」: 「従業員」、 "テーブル": "emp", 「方言」: 「csv-unix」、 "行をスキップ": 0, "showProgress": 真、 "文字セット": "utf8mb4", "columns": [1,2,3,4,5,6], ## ファイル内の列と同じ数のシリアル番号を使用します "decodeColumns": { "emp_no": "@1"、##はファイル「birth_date ":"@2 "の最初の列に対応します。 name ":" concat(@3、 ''、@4) "、##ファイルの3列目と4番目の列を1つの列にマージして、テーブル「ジェンダー」:"@5 "でフィールド値を生成します。 delete_flag ":" if(@6 <'1988-01-01'、 'y'、 'n') "##ファイルの6番目の列に基づいて論理的な判断を下し、テーブルで対応するフィールド値を生成します} }) ## インポートするファイルのパスが明確に指定されているインポートコマンド util.import_table( [ "/data/mysql/3306/tmp/employees_01.csv", "/data/mysql/3306/tmp/employees_02.csv", "/data/mysql/3306/tmp/employees_03.csv" ]、 { 「スキーマ」: 「従業員」、 "テーブル": "emp", 「方言」: 「csv-unix」、 "行をスキップ": 0, "showProgress": 真、 "文字セット": "utf8mb4", "columns": [1,2,3,4,5,6], ## ファイル内の列と同じ数のシリアル番号を使用します "decodeColumns": { "emp_no": "@1"、##はファイル「birth_date ":"@2 "の最初の列に対応します。 name ":" concat(@3、 ''、@4) "、##ファイルの3列目と4番目の列を1つの列にマージして、テーブル「ジェンダー」:"@5 "でフィールド値を生成します。 delete_flag ":" if(@6 <'1988-01-01'、 'y'、 'n') "##ファイルの6番目の列に基づいて論理的な判断を下し、テーブルで対応するフィールド値を生成します} }) 3.2 同時インポート同時インポートを実験する前に、同時実行をシミュレートするために 1,000 万の sbtest1 テーブル (約 2G のデータ) を作成します。import_table パラメータは同時実行構成としてスレッドを使用し、デフォルトは 8 同時実行です。 ## テストに必要な sbtest1 データをエクスポートします [root@10-186-61-162 tmp]# ls -lh 総使用量: 1.9G -rw-r----- 1 mysql mysql 579 3月24日 19:07 employees_01.csv -rw-r----- 1 mysql mysql 584 3月24日 18:48 employees_02.csv -rw-r----- 1 mysql mysql 576 3月24日 18:48 employees_03.csv -rw-r----- 1 mysql mysql 1.9G 3月26日 17:15 sbtest1.csv ## スレッドを8つ同時に実行できるようにする util.import_table( [ "/data/mysql/3306/tmp/sbtest1.csv", ]、 { 「スキーマ」: 「デモ」、 "テーブル": "sbtest1", 「方言」: 「csv-unix」、 "行をスキップ": 0, "showProgress": 真、 "文字セット": "utf8mb4", "スレッド": "8" }) 3.3 輸入率の規制maxRate と threads を使用して、各同時スレッドのインポート データを制御できます。たとえば、現在の構成に 4 つのスレッドがあり、各スレッドのレートが 2M/s の場合、最大値は 8M/s を超えません。 util.import_table( [ "/data/mysql/3306/tmp/sbtest1.csv", ]、 { 「スキーマ」: 「デモ」、 "テーブル": "sbtest1", 「方言」: 「csv-unix」、 "行をスキップ": 0, "showProgress": 真、 "文字セット": "utf8mb4", "スレッド": "4", "最大レート": "2M" }) 3.4 カスタムチャンクサイズデフォルトのチャンク サイズは 50M です。チャンク サイズを調整してトランザクション サイズを縮小することができます。たとえば、チャンク サイズを 1M に調整すると、各スレッドによって毎回インポートされるデータの量もそれに応じて削減されます。 util.import_table( [ "/data/mysql/3306/tmp/sbtest1.csv", ]、 { 「スキーマ」: 「デモ」、 "テーブル": "sbtest1", 「方言」: 「csv-unix」、 "行をスキップ": 0, "showProgress": 真、 "文字セット": "utf8mb4", "スレッド": "4", "バイト/チャンク": "1M", "最大レート": "2M" }) 4. Load Dataとimport_tableのパフォーマンス比較
-- データロードステートメント load data infile '/data/mysql/3306/tmp/sbtest1.csv' テーブルdemo.sbtest1に 文字セット utf8mb4 フィールドは ',' で終了します '"' で囲まれている '\n' で終了する行 -- import_table ステートメント util.import_table( [ "/data/mysql/3306/tmp/sbtest1.csv", ]、 { 「スキーマ」: 「デモ」、 "テーブル": "sbtest1", 「方言」: 「csv-unix」、 "行をスキップ": 0, "showProgress": 真、 "文字セット": "utf8mb4" }) ご覧のとおり、データのロードには約 5 分かかりますが、import_table ではデータのインポートが半分以下の時間で完了します。これは 2 倍以上の効率です (仮想マシン環境のディスク IO 容量が制限されている条件下で)。 上記はMySQL Shellのimport_tableデータインポートの詳細です。import_tableデータインポートの詳細については、123WORDPRESS.COMの他の関連記事に注意してください。 以下もご興味があるかもしれません:
|
<<: docker-maven-plugin の詳細な使用方法
>>: スパンの最小高さを定義するソリューションは効果がありません
Web ページのスタイル設定に関しては、プロジェクトで純粋な CSS または SCSS (および他...
長い間コンピューターで mysql を使用していなかったので、パスワードを忘れてしまいました。でも、...
nginx、mysql、tomcat などのサービスをインストールするときに、使用する必要があるポー...
1. 今日の午後、コースの要件により、Ubuntu で FTP サーバーを設定する実験を行う必要が...
1|0 カーネルをコンパイルする(1)uname -rコマンドを実行してカーネルバージョンを表示しま...
この記事を読む前に、Volumes について予備知識を身に付けておいてください。詳細については、こち...
実際のWebページ開発でも、アコーディオンは頻繁に登場します。簡単なアコーディオンを作ったのですが、...
AES暗号化の使用データ転送の暗号化と復号化処理 --- AES.js最初のステップ: vue に ...
何ですかまず、Docker の概念を見てみましょう。アプリケーションと実行環境をコンテナにパッケージ...
目次ネプローダーをインストールするプラグインのインポート始める配置折りたたみディスプレイノードをクリ...
目次1. 短絡判定2. オプション連鎖演算子 (?) 3. ヌル合体演算子 (??) 4. 終了関数...
MySQL トリガー構文の詳細: トリガーは、特定のテーブル内のデータが挿入、削除、または更新される...
ウェブページを画像としてキャプチャする新機能があったので、人気のhtml2canvasを使ってみまし...
今日は仮想マシンを使って実験をしました。システムをインストールし、いくつかのオプションを最適化した後...
この記事では、例を使用して MySQL 一時テーブルの使用方法を説明します。ご参考までに、詳細は以下...