MySQL Load Dataの多様な用途1. LOAD の基本的な背景
2. 基本パラメータをロードする
-- 基本パラメータをエクスポートします。* を選択して、出力ファイル '/data/mysql/3306/tmp/employees.txt' にエクスポートします。 文字セット utf8mb4 フィールドは ',' で終了します '"' で囲まれている '\n' で終了する行 従業員から。従業員の上限は 10 です。 -- 基本パラメータをインポートし、ファイル '/data/mysql/3306/tmp/employees.txt' にデータをロードします テーブルdemo.empに置き換えます 文字セット utf8mb4 フィールドは ',' で終了します '"' で囲まれている '\n' で終了する行 ... 3. サンプルデータとサンプルテーブル構造をロードする
--エクスポートされたファイルデータの内容 [root@10-186-61-162 tmp]# cat employees.txt 「10001」、「1953-09-02」、「ゲオルギ」、「ファチェッロ」、「M」、「1986-06-26」 「10002」、「1964-06-02」、「ベザレル」、「ジンメル」、「F」、「1985-11-21」 "10003","1959-12-03","Parto","Bamford","M","1986-08-28" 「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」 -- サンプル テーブル構造 SQL > desc demo.emp; +-------------+---------------+------+-----+--------+-------+ | フィールド | タイプ | Null | キー | デフォルト | 追加 | +-------------+---------------+------+-----+--------+-------+ | emp_no | int | NO | PRI | NULL | | | 生年月日 | 日付 | NO | | NULL | | | first_name | varchar(16) | NO | | NULL | | | last_name | varchar(16) | NO | | NULL | | | fullname | varchar(32) | YES | | NULL | | -- エクスポートされたデータ ファイルに存在しない、テーブル内の新しいフィールド | gender | enum('M','F') | NO | | NULL | | | hire_date | 日付 | NO | | NULL | | | modify_date | datetime | YES | | NULL | | -- エクスポートされたデータ ファイルに存在しない新しいフィールドがテーブルに追加されます| delete_flag | char(1) | YES | | NULL | | -- エクスポートされたデータ ファイルに存在しない新しいフィールドがテーブルに追加されます+-------------+---------------+------+------+--------+--------+ -- エクスポートされたデータとフィールド emp_no birth_date first_name last_name gender hire_date 間の対応関係 「10001」「1953-09-02」「ゲオルギ」「ファチェッロ」「M」「1986-06-26」 「10002」「1964-06-02」「ベザレル」「ジンメル」「F」「1985-11-21」 「10003」「1959-12-03」「パルト」「バンフォード」「M」「1986-08-28」 「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」 4. LOADシナリオの例シナリオ 1. LOAD ファイルのフィールド数がデータ テーブルの数より多い
-- 2 つのフィールドを持つテーブル構造を一時的に作成します。SQL > create table emp_tmp select emp_no,hire_date from emp; SQL > desc emp_tmp; +-----------+------+------+------+-------+-------+ | フィールド | タイプ | Null | キー | デフォルト | 追加 | +-----------+------+------+------+-------+-------+ | emp_no | int | NO | | NULL | | | hire_date | 日付 | NO | | NULL | | +-----------+------+------+------+-------+-------+ -- データのインポート ステートメント load data infile '/data/mysql/3306/tmp/employees.txt' テーブルdemo.emp_tmpに置き換えます 文字セット utf8mb4 フィールドは ',' で終了します '"' で囲まれている '\n' で終了する行 (@C1、@C2、@C3、@C4、@C5、@C6) -- この部分は、employees.txt ファイル内の 6 列のデータに対応します -- エクスポートされたデータで指定された 2 列のみがテーブル内のフィールドと一致します。マッピング関係で指定された順序は、インポート結果に影響しません。set hire_date=@C6、 従業員番号=@C1; -- データのインポート結果例 SQL > select * from emp_tmp; +--------+-------------+ |従業員番号 |雇用日 | +--------+-------------+ | 10001 | 1986-06-26 | | 10002 | 1985-11-21 | | 10003 | 1986-08-28 | | 10004 | 1986-12-01 | | 10005 | 1989-09-12 | | 10006 | 1989-06-02 | | 10007 | 1989-02-10 | | 10008 | 1994-09-15 | | 10009 | 1985-02-18 | | 10010 | 1989-08-24 | +--------+-------------+ セット内の行数は 10 行 (0.0016 秒) シナリオ 2. LOAD ファイルのフィールド数がデータ テーブルより少ない
-- データのインポート ステートメント load data infile '/data/mysql/3306/tmp/employees.txt' テーブルdemo.empに置き換えます 文字セット utf8mb4 フィールドは ',' で終了します '"' で囲まれている '\n' で終了する行 (@C1、@C2、@C3、@C4、@C5、@C6) -- この部分は、employees.txt ファイル内の 6 列のデータに対応します -- ファイル内のフィールドをテーブル内のフィールドにマップし、テーブル内の余分なフィールドは処理しません。set emp_no=@C1、 生年月日=@C2, ファーストネーム=@C3, 姓=@C4, 性別=@C5, 雇用日=@C6; シナリオ3. LOADはカスタムフィールドデータを生成する
-- データのインポート ステートメント load data infile '/data/mysql/3306/tmp/employees.txt' テーブルdemo.empに置き換えます 文字セット utf8mb4 フィールドは ',' で終了します '"' で囲まれている '\n' で終了する行 (@C1、@C2、@C3、@C4、@C5、@C6) -- この部分は、employees.txt ファイル内の 6 列のデータに対応します -- 次の部分は、テーブル内のフィールドをデータ ファイルのフィールドに明確にマッピングします。存在しないデータは関数処理によって生成されます (固定値に設定することもできます) emp_no=@C1 に設定し、 生年月日=@C2, first_name=upper(@C3), -- インポートしたデータを大文字に変換します last_name=lower(@C4), -- インポートしたデータを小文字に変換します fullname=concat(first_name,' ',last_name), -- first_name と last_name を連結します gender=@C5, 雇用日=@C6、 modify_date=now(), -- 現在の時刻データを生成します delete_flag=if(hire_date<'1988-01-01','Y','N'); -- 特定の列に基づいて生成される値に対して条件付き操作を実行します シナリオ4. 固定長データのロード
SQL > 選択 c1をsample_dataとして、 substr(c1,1,3) を c1 として、 substr(c1,4,3) を c2 として、 substr(c1,7,2) を c3 として、 substr(c1,9,5) を c4 として、 substr(c1,14,3) を c5 として、 t1からc6としてsubstr(c1,17,3) ************************** 1. 行 **************************** sample_data: ABC Yu Zhenxing CD MySQL EF G データベース c1: ABC c2: ユ・ジェンシン c3: CD c4: MySQL c5: EFG c6: データベース
-- 固定長データを生成するSQL > select 連結(rpad(emp_no,10,' '), rpad(生年月日,19,' '), rpad(first_name,14,' '), rpad(姓,16,' '), rpad(性別,2,' '), rpad(hire_date,19,' ')) を固定長データとして 従業員から。従業員の上限は 10 人です。 +--------------------------------------------------------------------------------------------------+ | 固定長データ | +--------------------------------------------------------------------------------------------------+ | 10001 1953-09-02 ゲオルギ・ファセロ M 1986-06-26 | | 10002 1964-06-02 ベザレル・シメル F 1985-11-21 | | 10003 1959-12-03 パート バンフォード M 1986-08-28 | | 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 | +--------------------------------------------------------------------------------------------------+ -- 固定長データをエクスポートする選択 連結(rpad(emp_no,10,' '), rpad(生年月日,19,' '), rpad(first_name,14,' '), rpad(姓,16,' '), rpad(性別,2,' '), rpad(hire_date,19,' ')) を固定長データとして 出力ファイル '/data/mysql/3306/tmp/employees_fixed.txt' へ 文字セット utf8mb4 '\n' で終了する行 従業員から。従業員の上限は 10 人です。 --エクスポートデータの例 [root@10-186-61-162 tmp]# cat employees_fixed.txt 10001 1953-09-02 ゲオルギ・ファセロ M 1986-06-26 10002 1964-06-02 ベザレル・シメル F 1985-11-21 10003 1959-12-03 パート バンフォード M 1986-08-28 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 -- 固定長データをインポートします。load data infile '/data/mysql/3306/tmp/employees_fixed.txt' テーブルdemo.empに置き換えます 文字セット utf8mb4 フィールドは ',' で終了します '"' で囲まれている '\n' で終了する行 (@row) -- データの行をセット全体として定義します emp_no = trim(substr(@row,1,10)), -- substr を使用して最初の 10 文字を取得し、先頭と末尾のスペースを削除します birth_date = trim(substr(@row,11,19)), -- 後続のフィールドも同様です first_name = trim(substr(@row,30,14)), last_name = トリム(substr(@row,44,16))、 fullname = concat(first_name,' ',last_name), -- first_name と last_name を連結します。gender = trim(substr(@row,60,2)), 雇用日 = トリム(substr(@row,62,19))、 修正日 = now(), delete_flag = if(hire_date<'1988-01-01','Y','N'); -- 特定の列に基づいて生成される値に対して条件付き操作を実行します 5. LOADの概要1. デフォルトでは、テキスト ファイル内のインポート順序は 2. テーブル構造とテキスト データに矛盾がある場合は、データが間違ったフィールドにインポートされないように、テキスト ファイル内の列に順番に番号を付け、テーブル内のフィールドとのマッピング関係を確立することをお勧めします。 3. インポートするテキストファイルが大きい場合は、splitコマンドなどを使用して、 4. ファイルをインポートした後、次のステートメントを実行して、インポートされたデータに
5. テキスト ファイルのデータとテーブル構造に大きな違いがある場合、またはデータをクリーンアップして変換する必要がある場合は、専門的な ETL ツールを使用するか、MySQL に大まかにインポートしてから処理して変換することをお勧めします。 上記は、MySQL Load Data のさまざまな使用方法の詳細な内容です。MySQL Load Data の使用方法の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。今後とも123WORDPRESS.COMをよろしくお願いいたします! 以下もご興味があるかもしれません:
|
<<: Docker Composeオーケストレーションツールの詳細な説明
>>: この記事では、Viteがブラウザのリクエストに対して何を行うかを説明します。
アバターをアップロードするにはVue-Cropperコンポーネントを使用します。参考までに具体的な内...
目次同じ名前の名前空間をマージする名前空間とその他の種類のマージ同じ名前の名前空間とクラスをマージす...
<TR> タグの属性は、次の表に示すように、テーブル内の各行のプロパティを設定するために...
1. セマンティゼーションとは何ですか? Bing辞書の説明セマンティクス化とは、適切な HTML ...
1. これは理解するのが少し複雑なので、原理を注意深く読んで自分で入力していただければ幸いです。 &...
この記事では、カルーセルの効果を実現するためのJavaScriptの具体的なコードを参考までに共有し...
1. Dockerをインストールする1. 仮想マシンに Centos7 をインストールしました。Li...
もしかしたら私の考え方が間違っていたのかもしれないし、問題の説明が少し乱雑だったのかもしれないが、こ...
美しいコードは美しい Web サイトの基礎です。優れた CSS は、同様に優れた HTML の上にの...
Baiduで検索しました。 。 chcp コマンドを使用して、cmd の文字エンコーディングを 65...
JWT の紹介JWTとは正式名称はJSON Web Tokenで、現在最も人気のあるクロスドメイン認...
複数列のインデックスについては、理解が不足していることがよくあります。よくある間違いは、多数の列に独...
MySQL 8.0.16 以降では、パスワードの有効期限ポリシーを設定できます。今日は、この小さな知...
目次問題のシナリオ:解決: 1. フィールドを個別にチェックする2. フォームフィールドの下のフィー...
最近 CSS を勉強していたとき、 2 つの CSS プロパティだけを使用して全画面スクロール効果を...