インスタンスプロファイル で COPY INTO を使用してデータをロードする

この記事では、 COPY INTO コマンドを使用して、AWS アカウントの Amazon S3 バケットから Databricks SQL のテーブルにデータをロードする方法について説明します。

この記事のステップでは、管理者が AWS インスタンスプロファイルを使用するように SQLウェアハウスを設定して、S3 のソースファイルにアクセスできるようにしていることを前提としています。 管理者がストレージ資格情報を使用して Unity Catalog 外部ロケーションを構成した場合は、代わりに「 Unity Catalog ボリュームまたは外部ロケーションを使用して COPY INTO を使用してデータを読み込む 」を参照してください。管理者から一時的な認証情報 (AWS アクセスキー ID、シークレットキー、セッショントークン) が提供された場合は、代わりに「 一時的な認証情報で COPY INTO を使用してデータをロードする 」を参照してください。

Databricks では、Databricks SQL を使用した増分および一括データの読み込みに COPY INTO コマンドを使用することをお勧めします。

COPY INTO 何千ものファイルを含むデータソースに適しています。 Databricks では、数百万のファイルを読み込むために Auto Loader を使用することをお勧めしますが、これは Databricks SQL ではサポートされていません。

始める前に

Databricks にデータを読み込む前に、次のものがあることを確認してください。

  • S3 のデータへのアクセス。 管理者はまず、Databricks SQLウェアハウスがソース ファイルを読み取ることができるように、「 インジェスト用のデータ アクセスを構成する 」の手順を完了する必要があります。

  • 管理者が作成したインスタンス プロファイルを使用する Databricks SQLウェアハウス。

  • SQLウェアハウスに対する 管理権限

  • 完全修飾 S3 URI。

  • Databricks SQL ユーザーインターフェイスに精通している。

ステップ1:クラウドストレージ 内のデータへのアクセスを確認する

クラウドオブジェクトストレージ内の正しいデータにアクセスできることを確認するには、次の手順を実行します。

  1. サイドバーで、[ クエリー>を作成]をクリックします。

  2. SQL エディターのメニュー バーで、SQLウェアハウスを選択します。

  3. SQL エディターで、次のコードを貼り付けます。

    select * from csv.<path>
    

    <path> を、管理者から受け取った S3 URI に置き換えます。たとえば、 s3://<bucket>/<folder>/.

  4. [ 実行] をクリックします。

ステップ 2: テーブル を作成する

このステップ では、Databricks ワークスペースにテーブルを作成して受信データを保持する方法について説明します。

  1. SQL エディターで、次のコードを貼り付けます。

    CREATE TABLE <catalog_name>.<schema_name>.<table_name> (
      tpep_pickup_datetime  TIMESTAMP,
      tpep_dropoff_datetime TIMESTAMP,
      trip_distance DOUBLE,
      fare_amount DOUBLE,
      pickup_zip INT,
      dropoff_zip INT
    );
    
  2. [ 実行] をクリックします。

ステップ 3: クラウドストレージからテーブルに データをロードする

このステップでは、S3 バケットから Databricks ワークスペースで作成したテーブルにデータをロードする方法について説明します。

  1. サイドバーで、[ クエリー>を作成]をクリックします。

  2. SQL エディターのメニュー バーで、SQLウェアハウスを選択し、SQLウェアハウスが実行されていることを確認します。

  3. SQL エディターで、次のコードを貼り付けます。 このコードでは、次のように置き換えます。

    • <s3-bucket> を S3 バケットの名前に置き換えます。

    • <folder> を S3 バケット内のフォルダの名前に置き換えます。

    COPY INTO <catalog-name>.<schema-name>.<table-name>
    FROM 's3://<s3-bucket>/<folder>/'
    FILEFORMAT = CSV
    FORMAT_OPTIONS (
      'header' = 'true',
      'inferSchema' = 'true'
    )
    COPY_OPTIONS (
       'mergeSchema' = 'true'
    );
    
    SELECT * FROM <catalog_name>.<schema_name>.<table_name>;
    

    FORMAT_OPTIONS FILEFORMATによって異なります。この場合、 header オプションは CSV ファイルの最初の行をヘッダーとして扱うように Databricks に指示し、 inferSchema オプションは CSV ファイル内の各フィールドのデータ型を自動的に決定するように Databricks に指示します。

  4. [ 実行] をクリックします。

    もう一度 [ 実行 ] をクリックすると、新しいデータはテーブルに読み込まれません。 これは、 COPY INTO コマンドが新しいデータと見なされるもののみを処理するためです。

クリーンアップ

ワークスペース内の関連リソースを保持する必要がなくなった場合は、それらをクリーンアップできます。

テーブル を削除する

  1. サイドバーで、[ クエリー>を作成]をクリックします。

  2. SQLウェアハウスを選択し、SQLウェアハウスが実行されていることを確認します。

  3. 次のコードを貼り付けます。

    DROP TABLE <catalog-name>.<schema-name>.<table-name>;
    
  4. [ 実行] をクリックします。

  5. このクエリーのタブにカーソルを合わせ、[ X ] アイコンをクリックします。

SQL エディター でクエリーを削除する

  1. サイドバーで、[ SQL エディタ] をクリックします。

  2. SQL エディターのメニュー バーで、このチュートリアル用に作成した各クエリーのタブにカーソルを合わせ、[ X ] アイコンをクリックします。

関連リソース