使用 COPY INTO 通过服务主体加载数据

本文介绍如何使用 COPY INTO 命令将数据从 Azure 帐户中的 Azure Data Lake Storage Gen2 (ADLS Gen2) 容器加载到 Databricks SQL 工作区中的表内。

本文中的步骤假定管理员已配置 SQL 仓库以使用 Azure Databricks 服务主体,以便你可以访问 ADLS Gen2 中的源文件。 如果管理员使用存储凭据配置了 Unity Catalog 外部位置,请参阅使用 COPY INTO 和 Unity Catalog 卷/外部位置加载数据。 如果管理员为你提供了临时凭据(Blob SAS 令牌),请按照使用 COPY INTO 和临时凭据加载数据中的步骤操作。

Databricks 建议在 Databricks SQL 中使用 COPY INTO 命令进行增量和批量数据加载。

注意

COPY INTO 适用于包含数千个文件的数据源。 Databricks 建议使用自动加载程序加载数百万个文件,Databricks SQL 不支持这些文件。

在开始之前

在将数据加载到 Azure Databricks 之前,请确保满足以下条件:

  • 有权访问 ADLS Gen2 中的数据。 管理员必须先完成配置数据访问以进行引入中的步骤,以便 Databricks SQL 仓库可以读取你的源文件。
  • Databricks SQL 仓库。
  • 对 SQL 仓库拥有“可管理”权限。
  • ADLS Gen2 容器中数据的路径。
  • 熟悉 Databricks SQL 用户界面。

步骤 1:确认有权访问云存储中的数据

若要确认你是否有权访问云对象存储中的正确数据,请执行以下操作:

  1. 在边栏中,单击“创建”>“查询”。

  2. 在 SQL 编辑器的菜单栏中,选择 SQL 仓库。

  3. 在 SQL 编辑器中粘贴以下代码:

    select * from csv.<path>
    

    <path> 替换为管理员提供的 ADLS Gen2 容器路径。例如 abfss://<container>@<storage-account>.dfs.core.windows.net/<folder>

  4. 单击 “运行”

步骤 2:创建表

此步骤说明如何在 Azure 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:将数据从云存储加载到表中

此步骤说明如何将数据从 ADLS Gen2 容器加载到 Azure Databricks 工作区的表中。

  1. 在边栏中,单击“创建”>“查询”。

  2. 在 SQL 编辑器的菜单栏中,选择 SQL 仓库并确保 SQL 仓库正在运行。

  3. 在 SQL 编辑器中粘贴以下代码。 在此代码中,请将:

    • <container> 替换为你的存储帐户中的 ADLS Gen2 容器名称。
    • <storage-account> 替换为你的 ADLS Gen2 存储帐户名称。
    • <folder> 替换为包含你的数据的文件夹的名称。
    • <blob-sas-token> 替换为管理员提供的“Blob SAS 令牌”值。
    COPY INTO <catalog-name>.<schema-name>.<table-name>
    FROM 'abfss://<container>@<storage-account>.dfs.core.windows.net/<folder>'
    FILEFORMAT = CSV
    FORMAT_OPTIONS (
      'header' = 'true',
      'inferSchema' = 'true'
    );
    
    SELECT * FROM <catalog-name>.<schema-name>.<table-name>;
    

    注意

    FORMAT_OPTIONSFILEFORMAT 不同。 在本例中,header 选项指示 Azure Databricks 将 CSV 文件的第一行视为标头,inferSchema 选项指示 Azure Databricks 自动确定 CSV 文件中每个字段的数据类型。

  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”图标。

其他资源