このペジは機械翻訳したものです。

8.4パラレルテブル

MySQL壳8.0.17で導入されたMySQL壳パラレルテーブルインポートユーティリティutil.importTable ()は,大規模なデータファイルのMySQLリレーショナルテーブルへの高速データインポートを提供します。このユーティリティは,入力データファイルを分析してチャンクに配布し,パラレル接続を使用してチャンクをターゲットMySQLサーバーにアップロードします。このユティリティは,加载数据ステートメントを使用した標準のシングルスレッドアップロードよりも数回高速に大規模データインポートを完了できます。

パラレルテーブルインポートユーティリティを実行する場合,データファイルのフィールドとMySQLテーブルのカラムの間のマッピングを指定します。加载数据ステートメントの場合と同様に,フィールド処理および行処理のオプションを設定して,任意の形式でデータファイルを処理できます。複数のファereplicationルの場合,すべてのファereplicationルは同じ形式である必要があります。ユティリティのデフォルト言語は,そのステトメントのデフォルト設定を使用して选择……到输出文件ステトメントを使用して作成されたファ。ユーティリティには,CSVファイル(DOSまたはUNIXシステムで作成された),TSVファイルおよびJSONの標準データ形式にマップする事前設定済のダイアレクトもあり,必要に応じてフィールド処理および行処理オプションを使用してこれらをカスタマイズできます。JSONデタは,每行文档形式である必要があります。

パラレルテーブルインポートユーティリティが導入された後にいくつかの関数が追加されているため,最新バージョンのMySQL壳を使用してユーティリティを完全に機能させてください。

入力前処理

MySQL Shell 8.0.22から,パラレルテ,ブル,ンポ,トユ,ティリティは,加载数据ステトメントと同じ方法で,入力前処理のためにデルからカラムを取得できます。選択したデタを破棄するか,デ。

Oracle云基础设施对象存储(Oracle Cloud Infrastructure Object Storage) openstackンポopenstackト

MySQL壳8.0.20までは,クライアントホストからローカルディスクとしてアクセス可能な場所からデータをインポートする必要があります。MySQL Shell 8.0.21からosBucketNameオプションで指定された甲骨文云基础设施对象存储バケットからデータをインポートすることもできます。

複数のデタファ

MySQL壳8.0.22まで,パラレルテーブルインポートユーティリティでは,単一の入力データファイルを単一のリレーショナルテーブルにインポートできます。MySQL壳8.0.23からは,このユーティリティは指定されたファイルのリストをインポートすることもでき,ワイルドカードパターンマッチングをサポートしてすべての関連ファイルを場所から含めます。ユーティリティの単一の実行によってアップロードされた複数のファイルは,単一のリレーショナルテーブルに配置されるため,たとえば,複数のホストからエクスポートされたデータを,分析に使用する単一のテーブルにマージできます。

圧縮ファ邮箱ル処理

MySQL壳8.0.21までは,パラレルテーブルインポートユーティリティは,圧縮されていない入力データファイルのみを受け入れます。ユーティリティは,データファイルを分析してチャンクに配布し,チャンクをターゲットMySQLサーバーのリレーショナルテーブルにアップロードして,チャンクをパラレル接続間で分割します。MySQL Shell 8.0.22から,ユ,ティリティは,gzip. gz)およびzstd(.zst)形式で圧縮されたデータファイルを受け入れて,ファイル拡張子に基づいてフォーマットを自動的に検出することもできます。ユーティリティは,圧縮形式でストレージから圧縮ファイルをアップロードし,転送のその部分の帯域幅を節約します。圧縮ファイルはチャンクに分散できないため,かわりにユーティリティはパラレル接続を使用して複数のファイルを解凍し,ターゲットサーバーに同時にアップロードします。入力データファイルが1つしかない場合,圧縮ファイルのアップロードで使用できるのは1つの接続のみです。

MySQL壳のパラレルテーブルインポートユーティリティでは,MySQL壳テーブルエクスポートユーティリティからの出力がサポートされています。このユーティリティでは,生成されたデータファイルを出力として圧縮し,ローカルフォルダまたはオブジェクトストレージバケットにエクスポートできます。パラレルテーブルインポートユーティリティのデフォルトの言語は,テーブルエクスポートユーティリティによって生成される出力ファイルのデフォルトです。パラレルテーブルインポートユーティリティを使用して,他のソースからファイルをアップロードすることもできます。

MySQL Shellダンプロドユティリティutil.loadDump ()は,MySQL Shell目录ンスタンスダンプユティリティutil.dumpInstance (),スキマダンプユティリティutil.dumpSchemas ()およびテブルダンプユティリティutil.dumpTables ()によって生成されたチャンク出力ファイルとメタデータの組合せをインポートするように設計されています。ターゲットサーバーにアップロードする前にチャンク出力ファイルのデータを変更する場合は,パラレルテーブルインポートユーティリティをダンプロードユーティリティと組み合せて使用できます。これを行うには,まずダンプロードユーティリティを使用して,選択したテーブルのDDLのみをロードし,ターゲットサーバーにテーブルを作成します。次に,パラレルテーブルインポートユーティリティを使用して,テーブルの出力ファイルからデータを取得および変換し,ターゲットテーブルにインポートします。必要に応じて,デタを変更する他のテブルに対してこのプロセスを繰り返します。最後に,ダンプロードユーティリティを使用して,変更しない残りのテーブル(変更したテーブルを除く)のDDLおよびデータをロードします。手順の詳細は,加载数据ステトメントをサポトしていないxプロトコル接続を介して動作することはできません。

e .ンポe .タファe .ルは,次のいずれかの場所にある必要があります:

  • クラ邮箱アントホストからロ邮箱カルディスクとしてアクセス可能な場所。

  • URLで指定された、HTTPまたはHTTPSを介してクライアントホストにアクセス可能なリモートの場所。パタン一致は,この方法でアクセスされるファトされていません。

  • Oracle云基础设施对象存储バケット(MySQL Shell 8.0.21から)。

データは,アクティブなMySQLセッションが接続されているMySQLサーバーの単一のリレーショナルテーブルにインポートされます。

パラレルテブルンポトユティリティでは,加载数据本地文件ステトメントを使用してデタをアップロドするため,タでlocal_infileシステム変数をに設定する必要があります。これを行うには,パラレルテーブルインポートユーティリティを実行する前に,SQLモードで次のステートメントを発行します:

SET GLOBAL local_infile = 1;

本地加载数据でセキュリティ上の既知の潜在的な問題を回避するために,MySQLサーバーがファイル転送リクエストを含むパラレルテーブルインポートユーティリティの加载数据リクエストに応答すると,ユーティリティは事前に決定されたデータチャンクのみを送信し,サーバーによって試行された特定のリクエストは無視します。詳細は,加载数据本地のセキュリティ上の考慮事項を参照してください。

関数

MySQL Shell APIでは,パラレルテ跑龙套グロバルオブジェクトの関数であり,次のシグネチャを持ます:

importTable ({file_name | file_list}, options)

file_nameは,屏幕上显示ンポ,屏幕上显示トするデ,屏幕上显示タを含む単一ファ。または,file_listは,複数のデ。Windowsでは,ファWindowsルパスでバックスラッシュをエスケ,プする必要があります。または,代わりにスラッシュを使用できます。

  • ローカルディスク上のクライアントホストからアクセス可能なファイルの場合,ディレクトリパスに接頭辞として文件:/ /スキマを付けるか,デフォルトのスキマを使用できます。この方法でアクセスされるファopenstackルの場合,ファopenstackルパスには,パタopenstackン一致のためのワopenstackルドカopenstackド(複数文字)および?(単一文字)を含めることができます。

  • HTTPまたはHTTPSを介してクライアントホストにアクセスできるファイルの場合は,必要に応じて,URLまたはURLのリストを接頭辞としてhttp://またはhttps://スキマを付けてhttp [s]: / / host.domain[:港口]/路径の形式で指定します。この方法でアクセスされるファルの場合,パタン一致は使用できません。HTTPサーバーは范围リクエストヘッダーをサポートし,含量レスポンスヘッダーをクライアントに返す必要があります。

  • 甲骨文云基础设施对象存储バケット内のファイルの場合は,バケット内のファイルへのパスを指定し,osBucketNameオプションを使用してバケット名を指定します。

选项はンポトオプションのディクショナリで,空の場合は省略できます。オプションは,例の後にリストされています。

この関数は,void,またはエラ,の場合は例外を返します。帐号ンポ帐号トがCtrl + Cを持つユーザーによって途中で停止された場合,またはエラーが発生した場合,ユーティリティはデータの送信を停止します。サーバーが受信したデータの処理を終了すると,その時点で各スレッドによってインポートされていたチャンク,完了率およびターゲットテーブルで更新されたレコード数を示すメッセージが返されます。

次の例ではMySQL ShellJavaScriptモードの最初の例とMySQL ShellPythonモードの次の例で,単一のCSVファイル/ tmp / productrange.csvのデタをmydbデタベスの产品

mysql-js> util.importTable("/tmp/productrange.csv", {schema: "mydb", table: "products", dialect: "csv-unix", skipRows: 1, showProgress: true})
mysql-py> util.import_table("/tmp/productrange.csv", {"schema": "mydb", "table": "products", "dialect": "csv-unix", "skipRows": 1, "showProgress": True})

次のMySQL Python Shellモードの例では,CSVファイルの言語のみを指定します。mydbは,MySQL Shellセッションのアクティブなスキマです。したがって,ユティリティは,ファ/ tmp / productrange.csv内のデタをmydbデタベス内のproductrangeテブルにトします:

Mysql-py > \use mydb Mysql-py > util.import_table("/tmp/ producrange .csv", {"dialect": "csv-unix"})

MySQL ShellPythonモードの次の例では,個別に名前が付けられたファイル,ワイルドカードパターンマッチングを使用して指定されたファイルの範囲,圧縮されたファイルなどの複数のファイルからデータをインポートします:

mysql-py >跑龙套。import_table([“data_a.csv”、“data_b *”、“data_c *”、“data_d.tsv。零强度时间”、“data_e.tsv。“/backup/replica3/2021_01_12/data_g. Zst”,“data_f.tsv.gz”,“/backup/replica3/2021_01_12/data_g. gz”。tsv”、“/备份/ replica3/2021_01_13 / *。tsv",], {"schema": "mydb", "table": "productrange"} )

パラレルテブルンポトユティリティは,mysqlshコマンド邮箱ンタフェ邮箱スを使用してコマンドラ邮箱ンから起動することもできます。このンタフェスを使用して,次の例のようにユティリティを起動します:

mysqlsh mysql://root:@127.0.0.1:3366——ssl-mode=DISABLED——util import-table /r/mytable。dump——schema=mydb——table=regions——bytes-per-chunk=10M——linesTerminatedBy=$'\r\n'

複数のデータファイルをインポートする場合,次の例に示すように,ワイルドカードパターンマッチングを使用して指定されたファイルの範囲は,引用符で囲まれていればMySQL Shellglobパターンマッチングロジックによって展開されます。それ以外の場合は,mysqlshコマンドを入力したユザシェルのパタン一致ロジックによって展開されます。

Mysqlsh mysql://root:@127.0.0.1:3366——util import-table data_a.csv "data_b*" data_d.tsv。zst——schema=mydb——table=productrange——osBucketName=mybucket

mysqlshコマンドインタフェースを使用してパラレルテーブルインポートユーティリティを起動する場合,配列値は受け入れられないため,オプションはサポトされません。したがって,データファイルの入力行には,ターゲットテーブルのすべてのカラムに一致するフィールドが含まれている必要があります。前述の例に示すように,ラ(bashkshmkshzshなど)でansi-c引用符を使用して渡す必要があります。この邮箱ンタフェ邮箱スの詳細は,セクション5.8 " apiコマンドラ"を参照してください。

オプション

パラレルテーブルインポートユーティリティでは,次のインポートオプションを使用してデータのインポート場所とインポート方法を指定できます:

模式:“db_name

接続されたMySQLサバ。このオプションを省略すると,ユティリティは,接続uri文字列,使用\コマンドまたはMySQL壳オプションで指定された,現在のMySQL壳セッションで使用されているスキーマ名を識別して使用しようとします。スキマ名が指定されておらず,セッションから識別できない場合は,エラが返されます。

表:“table_name

タゲットリレショナルテブルの名前。このオプションを省略すると,テ。タゲットテブルがタ。

列:列名数组

ターゲットリレーショナルテーブルのカラムにマップされた順序で指定された,インポートファイルのカラム名を含む文字列の配列。このオプションは,インポートされたデータにターゲットテーブルのすべてのカラムが含まれていない場合,またはインポートされたデータのフィールドの順序がテーブルのカラムの順序と異なる場合に使用します。このオプションを省略した場合,入力行にはターゲットテーブルの各カラムに一致するフィールドが含まれると想定されます。

MySQL Shell 8.0.22からは,このオプションを使用して,加载数据ステトメントの場合と同じ方法で,入力前処理のために。配列内のカラム名のかわりに整数値を使用すると、ンポ、トファ、ル内のそのカラムは、@1などのユザ変数@intとして取得されます。選択したデタを破棄するか,decodeColumnsオプションを使用してデタを変換し,タブルのカラムに割り当てることができます。

MySQL ShellJavaScriptモードのこの例では,インポートファイルの2番目と4番目のカラムがユーザー変数@1および@2に割り当てられ,タゲットテブルのどのカラムにも割り当てるdecodeColumnsオプションはないため,これらは破棄されます。

mysql-js> util.importTable('file.txt', {table: 't1', columns: ['column1', 1, 'column2', 2, 'column3']});
decodeColumns:字典

オプションによってユーザー変数として取得されたインポートファイルカラムをターゲットテーブルのカラムに割り当て,加载数据ステトメントの句と同じ方法で前処理変換を指定する,キと値のペアのディクショナリ。MySQL Shell 8.0.22から使用できます。

MySQL ShellJavaScriptモードのこの例では,データファイルの最初の入力カラムがターゲットテーブルの最初のカラムとして使用されます。オプションによって変数@1に割り当てられた2番目の入力カラムは,ターゲットテーブルの2番目のカラムの値として使用される前に除算操作の対象となります。

mysql-js> util.importTable('file.txt', {columns: ['column1', 1], decodeColumns: {'column2': '@1 / 100'}});

MySQL ShellJavaScriptモードのこの例では,データファイルの入力カラムが両方とも変数に割り当てられ,様々な方法で変換されて,ターゲットテーブルのカラムへの移入に使用されます:

mysql-js > util.importTable (file.txt,{表:t1,列:[1、2],decodeColumns: {a:“@1”、“b”:“@2”、“金额”:“@1 + @2”、“多个”:“@1 * @2”、“权力”:“战俘(@1 @2)}});
skipRows:数量

インポートファイルの先頭,または複数のインポートファイルの場合はファイルリストに含まれるすべてのファイルの先頭で,この数のデータ行をスキップします。このオプションを使用して,アップロードからテーブルへのカラム名を含む初期ヘッダー行を省略できます。デフォルトでは,行はスキップされません。

replaceDuplicates(真|假):

既存の行と同じ値または一意ンデックスを持ンデックスを持(真正的)かスキップする(か。デフォルトはです。

方言:[默认csv | | csv-unix | tsv | json)

指定したファ邮箱ル形式に適した一連のフィ邮箱ルド処理および行処理オプションを使用します。linesTerminatedByfieldsTerminatedByfieldsEnclosedByfieldsOptionallyEnclosedおよびfieldsEscapedByオプションのいずれかまたは複数を指定して設定を変更することで,選択した言語をさらにカスタマイズするためのベースとして使用できます。デフォルトの言語は,そのステトメントのデフォルト設定で选择……到输出文件ステトメントを使用して作成されたファ。これは,MySQL壳牌テーブルエクスポートユーティリティによって生成される出力ファイルのデフォルトです。CSVファイル(DOSまたはUNIXシステムで作成),TSVファイルおよびJSONデータに適したその他のダイアレクトを使用できます。各言語に適用される設定は次のとおりです:

表8.2パラレルテブルンポトユティリティの言語設定

方言

linesTerminatedBy

fieldsTerminatedBy

fieldsEnclosedBy

fieldsOptionallyEnclosed

fieldsEscapedBy

默认的

(低频)

(选项卡)

[空]

csv

[CR][如果]

''

真正的

csv-unix

(低频)

''

tsv

[CR][如果]

(选项卡)

''

真正的

json

(低频)

(低频)

[空]

[空]


注記
  1. ダイアレクトのキャリッジリターンおよびラインフィードの値は,オペレーティングシステムに依存しません。

  2. linesTerminatedByfieldsTerminatedByfieldsEnclosedByfieldsOptionallyEnclosedおよびfieldsEscapedByオプションを使用する場合,コマンドインタプリタのエスケープ規則に応じて,バックスラッシュ文字(\)をオプション値で使用する場合は二重にする必要があります。

  3. 加载数据ステートメントを使用したMySQLサーバーと同様に,MySQL壳では,指定したフィールド処理および行処理オプションは検証されません。これらのオプションを正しく選択しないと,データが誤ったフィールドに部分的にインポートされたり,正しくインポートされない場合があります。e .ンポトを開始する前に必ず設定を確認し,後で結果を確認してください。

linesTerminatedBy:“字符

入力デタファ1以上の文字(または空の文字列)。デフォルトは,指定された方言,または方言オプションが省略されている場合は改行文字(\ nです。このオプションは,加载数据ステトメントのオプションと同等です。ユティリティでは,空の文字列に設定されている加载数据ステトメントのオプションに相当するものは提供されないことに注意してください。

fieldsTerminatedBy:“字符

入力デタファ1以上の文字(または空の文字列)。デフォルトは,指定された言語,または言語オプションが省略されている場合はタブ文字(\ tです。このオプションは,加载数据ステトメントのオプションと同等です。

fieldsEnclosedBy:“字符

入力デタファルドを囲む単一の文字(または空の文字列)。デフォルトは,指定された言語に対するものであり,方言オプションが省略されている場合は空の文字列です。このオプションは,加载数据ステトメントのオプションと同等です。

fieldsoptionallyenclose: [true | false]

fieldsEnclosedByに指定された文字が入力デタファ(内のすべてのフィルドを囲むか,場合によってのみフィルドを囲むか(真正的)。デフォルトは,指定された言語,または方言オプションが省略されている場合はです。このオプションにより,fieldsEnclosedByオプションは加载数据ステトメントの可选的由オプションと同等になります。

fieldsEscapedBy:“字符

入力デタファ。これを指定しない場合,エスケプシケンスの解釈は行われません。デフォルトは,指定された言語の場合と同様です。または,方言オプションが省略されている場合はバックスラッシュ (\)) です。 このオプションは、加载数据ステトメントの菲尔兹通过オプションと同等です。

osBucketName:“字符串

MySQL Shell 8.0.21に追加されました。入力データファイルが存在する甲骨文云基础设施对象存储バケットの名前。デフォルトでは,~ / .oci /配置にあるOracle Cloud Infrastructure CLI構成ファereplicationルの(默认)プロファルを使用して,バケットへの接続が確立されます。ociConfigFileおよびociProfileオプションを使用して、接続に使用される代替プロファ以及ルを置換できます。Cli構成ファereplicationルの設定手順にereplicationいては," sdkおよびcli構成ファル"を参照してください。

osNamespace:“字符串

MySQL Shell 8.0.21に追加されました。osBucketNameによって指定されたオブジェクトストレージバケットが配置される甲骨文云基础设施ネームスペース。オブジェクトストレージバケットのネームスペースは,甲骨文云基础设施コンソールのバケット詳細ページの”バケット情報”タブに表示されるか,甲骨文云基础设施コマンドラインインタフェースを使用して取得できます。

ociConfigFile:“字符串

MySQL Shell 8.0.21に追加されました。デフォルトの場所の~ / .oci /配置ではなく,接続に使用するプロファイルを含む甲骨文云基础设施CLI構成ファイル。

ociProfile:“字符串

MySQL Shell 8.0.21に追加されました。接続に使用されるOracle Cloud Infrastructure CLI構成ファereplicationル内の(默认)プロファイルではなく,接続に使用する甲骨文云基础设施プロファイルのプロファイル名。

characterSet:“字符集

MySQL Shell 8.0.21に追加されました。このオプションでは,ンポト時に入力デタが解釈される文字セットエンコディングを指定します。このオプションを二进制に設定すると、ンポ、ト中に変換は行われません。このオプションを省略すると,ンポ,character_set_databaseシステム変数で指定された文字セットを使用して入力デタが解釈されます。

bytesPerChunk:“大小

複数の入力デタファルのリストの場合,このオプションは使用できません。単一の入力デ加载数据コールごとに送信するバイト数(および行の終わりに到達するために必要な追加バイト数)を指定します。このユーティリティは,スレッドがターゲットサーバーに取得して送信するために,データをこのサイズのチャンクに分散します。チャンクサイズは,バイト数で指定するか,接尾辞k(キロバイト),M(メガバイト),G(ギガバイト)を使用して指定できます。たとえば,bytesPerChunk = " 2 k "では,スレッドは約2キロバトのチャンクを送信します。最小チャンクサ市市府ズは131072バ市市府トで,デフォルトのチャンクサ市市府ズは50mです。

线程:数量

入力ファ。スレッド数を指定しない場合,デフォルトの最大値は8です。複数の入力デタファ。単一の入力データファイルの場合,ユーティリティは次の式を使用して,この最大数までの適切なスレッド数を計算します:

最小{最大{1,线程},块}}

ここで,线程はスレッドの最大数,はデタが分割されるチャンクの数で,ファbytesPerChunkサ邮箱ズで除算してから1を加算して計算されます。この計算により,スレッドの最大数が実際に送信されるチャンクの数を超えた場合,ユーティリティは必要以上のスレッドを作成しません。

圧縮されたファイルはチャンクに配布できないため,ユーティリティはそのかわりにパラレル接続を使用して複数のファイルを一度にアップロードします。入力データファイルが1つしかない場合,圧縮ファイルのアップロードで使用できるのは1つの接続のみです。

maxRate:“

デタスルプットの最大制限(バト/秒/スレッド)。クライアントホストまたはターゲットサーバーのネットワーク,I / OまたはCPUの飽和を回避する必要がある場合は,このオプションを使用します。最大速度はバイト数で指定することも,接尾辞k(キロバイト),M(メガバイト),G(ギガバイト)を使用して指定することもできます。たとえば,maxRate = " 5米"では,各スレッドが5 mbのデータ/秒に制限され,8つのスレッドで40 mb /秒の転送速度が得られます。デフォルトは0で,これは制限がないことを意味します。

showProgress: [true | false]

ンポトの進行状況情報を表示(真正的)または非表示(します。デフォルトは,stdoutが端末(tty)の場合は真正的,それ以外の場合はです。