次の方法で共有


COPY INTO を使用した一般的なデータ読み込みパターン

COPY INTO を使用してファイル ソースから Delta Lake にデータを読み込む一般的なパターンについて説明します。

COPY INTO を使用するためのオプションは多くあります。 これらのパターンと組み合わせて COPY INTO で一時的な資格情報を使用することもできます。

すべてのオプションの完全なリファレンスについては、COPY INTO を参照してください。

COPY INTO のターゲット テーブルを作成する

COPY INTO は、既存の Delta テーブルをターゲットにする必要があります。

CREATE TABLE IF NOT EXISTS my_table
[(col_1 col_1_type, col_2 col_2_type, ...)]
[COMMENT <table-description>]
[TBLPROPERTIES (<table-properties>)];

Databricks Runtime 11.3 LTS 以降のスキーマの展開をサポートする形式では、これらのテーブルのスキーマの設定は省略可能です。 詳細については、「COPY INTO を使用したスキーマの推論と展開」を参照してください。

COPY INTO を使用して JSON データを読み込む

次の例では、Azure Data Lake Storage Gen2 (ADLS Gen2) の 5 つのファイルから my_json_data という Delta テーブルに JSON データを読み込みます。 このテーブルは、COPY INTO を実行する前に作成する必要があります。 いずれかのファイルから既にデータが読み込まれている場合、そのファイルのデータは再読み込みされません。

COPY INTO my_json_data
  FROM 'abfss://container@storageAccount.dfs.core.windows.net/base/path'
  FILEFORMAT = JSON
  FILES = ('f1.json', 'f2.json', 'f3.json', 'f4.json', 'f5.json')

 -- The second execution will not copy any data since the first command already loaded the data
 COPY INTO my_json_data
   FROM 'abfss://container@storageAccount.dfs.core.windows.net/base/path'
   FILEFORMAT = JSON
   FILES = ('f1.json', 'f2.json', 'f3.json', 'f4.json', 'f5.json')

COPY INTO を使用して Avro データを読み込む

次の例では、SELECT ステートメントの一部として追加の SQL 式を使用して、ADLS Gen2 の Avro データを読み込みます。

COPY INTO my_delta_table
  FROM (SELECT to_date(dt) dt, event as measurement, quantity::double
          FROM 'abfss://container@storageAccount.dfs.core.windows.net/base/path')
  FILEFORMAT = AVRO

COPY INTO を使用して CSV ファイルを読み込む

次の例では、abfss://container@storageAccount.dfs.core.windows.net/base/path/folder1 の Azure Data Lake Storage Gen2 から Delta テーブルに CSV ファイルを読み込みます。

COPY INTO target_table
  FROM (SELECT key, index, textData, 'constant_value'
          FROM 'abfss://container@storageAccount.dfs.core.windows.net/base/path')
  FILEFORMAT = CSV
  PATTERN = 'folder1/file_[a-g].csv'
  FORMAT_OPTIONS('header' = 'true')

-- The example below loads CSV files without headers in ADLS Gen2 using COPY INTO.
-- By casting the data and renaming the columns, you can put the data in the schema you want
COPY INTO target_table
  FROM (SELECT _c0::bigint key, _c1::int index, _c2 textData
        FROM 'abfss://container@storageAccount.dfs.core.windows.net/base/path')
  FILEFORMAT = CSV
  PATTERN = 'folder1/file_[a-g].csv'

COPY INTO を使用したスキーマの推論と展開

このセクションでは、COPY INTO を使用した一般的なスキーマの推論と展開の構成例を示します。

構文

COPY INTO my_table
FROM '/path/to/files'
FILEFORMAT = <format>
FORMAT_OPTIONS ('inferSchema' = 'true', `mergeSchema` = `true`)
COPY_OPTIONS ('mergeSchema' = 'true');

次の FORMAT_OPTIONS は、COPY INTO を使用した入力スキーマの自動推論に使用できます。

  • inferSchema: 解析対象の CSV レコードのデータ型を推論するか、すべての列が StringType であると見なすか。

  • mergeSchema: 複数のソース ファイル全体でスキーマを推論するか、各ソース ファイルのスキーマをマージするかどうか。

    ソース ファイルのスキーマが同じである場合、Databricks では、FORMAT_OPTIONS (false) の mergeSchema の既定の設定を使用することをお勧めします。

次の COPY_OPTIONS は、COPY INTO を使用してターゲット スキーマを展開するために使用できます。

  • mergeSchema: 入力スキーマに基づいてターゲット Delta テーブルのスキーマを展開するかどうか。

    入力スキーマとターゲット スキーマが同じ場合は、mergeSchemaCOPY_OPTIONSfalse にできます。

CSV スキーマの推論と展開

次の例では、my_pipe_data というスキーマレス Delta テーブルを作成し、ヘッダーを含むパイプ区切りの CSV を読み込みます。

mergeSchema は、入力ファイルにヘッダーまたは区切り記号の差異がある可能性があるため、FORMAT_OPTIONStrue になります。

CREATE TABLE IF NOT EXISTS my_pipe_data;

COPY INTO my_pipe_data
  FROM 'abfss://container@storageAccount.dfs.core.windows.net/base/path'
  FILEFORMAT = CSV
  FORMAT_OPTIONS ('mergeSchema' = 'true',
                  'delimiter' = '|',
                  'header' = 'true')
  COPY_OPTIONS ('mergeSchema' = 'true');

データの読み込み中に破損したファイルを無視する

何らかの破損の問題のためにデータを読み取ることができない場合は、FORMAT_OPTIONSignoreCorruptFilestrue に設定してそれらのファイルをスキップすることができます。

COPY INTO コマンドの結果は、num_skipped_corrupt_files 列の破損が原因でスキップされたファイルの数を返します。 このメトリックは、Delta テーブルの DESCRIBE HISTORY の実行後の numSkippedCorruptFilesoperationMetrics 列にも表示されます。

破損したファイルは COPY INTO によって追跡されないため、破損が修正された場合は、後続の実行で再読み込みできます。 VALIDATE モードで COPY INTO を実行すると、破損しているファイルを確認できます。

COPY INTO my_table
FROM '/path/to/files'
FILEFORMAT = <format>
[VALIDATE ALL]
FORMAT_OPTIONS ('ignoreCorruptFiles' = 'true')

Note

ignoreCorruptFiles は、Databricks Runtime 11.3 LTS 以降で使用できます。