Pular para o conteúdo principal

Carregar uso de dados COPY INTO com volumes Unity Catalog ou locais externos

Este artigo descreve como usar o comando COPY INTO para carregar dados de um bucket Amazon S3 (S3) em seu AWS account em uma tabela em Databricks SQL.

As etapas deste artigo pressupõem que o administrador tenha configurado um volume Unity Catalog ou um local externo para que o senhor possa acessar os arquivos de origem em S3. Se o administrador configurou um recurso compute para usar um AWS instance profile, consulte Carregar uso de dados COPY INTO com um instance profile ou tutorial: COPY INTO com Spark SQL em vez disso. Se o administrador lhe forneceu credenciais temporárias (um ID de acesso AWS key , uma chave secreta e tokens de sessão), consulte Carregar uso de dados COPY INTO com credenciais temporárias.

A Databricks recomenda o uso de volumes para acessar arquivos no armazenamento em nuvem como parte do processo de ingestão usando COPY INTO. Para obter mais informações sobre as recomendações de uso de volumes e locais externos, consulte Unity Catalog best practices.

Antes de começar

Antes de usar o site COPY INTO para carregar dados de um volume do Unity Catalog ou de um caminho de armazenamento de objetos na nuvem definido como um local externo do Unity Catalog, o senhor deve ter o seguinte:

  • O privilégio READ VOLUME em um volume ou o privilégio READ FILES em um local externo. Para obter mais informações sobre como criar volumes, consulte O que são volumes Unity Catalog ?. Para obter mais informações sobre como criar locais externos, consulte Visão geral de locais externos.

  • O caminho para seus dados de origem na forma de um URL de armazenamento de objetos na nuvem ou um caminho de volume.

    Exemplo de URL de armazenamento de objetos na nuvem: s3://landing-bucket/raw-data/json.

    Exemplo de caminho de volume: /Volumes/quickstart_catalog/quickstart_schema/quickstart_volume/raw_data/json.

  • O privilégio USE SCHEMA no esquema que contém a tabela de destino.

  • O privilégio USE CATALOG no catálogo principal.

Para obter mais informações sobre os privilégios Unity Catalog , consulte a Referência de privilégiosUnity Catalog.

Carregar dados de um volume

Para carregar dados de um volume do Unity Catalog, o senhor deve ter o privilégio READ VOLUME. Os privilégios de volume se aplicam a todos os diretórios aninhados no volume especificado.

Por exemplo, se o senhor tiver acesso a um volume com o caminho /Volumes/quickstart_catalog/quickstart_schema/quickstart_volume/, os seguintes comandos serão válidos:

SQL
COPY INTO landing_table
FROM '/Volumes/quickstart_catalog/quickstart_schema/quickstart_volume/raw_data'
FILEFORMAT = PARQUET;

COPY INTO json_table
FROM '/Volumes/quickstart_catalog/quickstart_schema/quickstart_volume/raw_data/json'
FILEFORMAT = JSON;

O prefixo de esquema dbfs: também é suportado com caminhos de volume (por exemplo, dbfs:/Volumes/...), mas a Databricks recomenda o uso do formato de caminho /Volumes/ mostrado acima.

Carregar uso de dados em um local externo

nota

Databricks recomenda o uso de volumes para acessar arquivos no armazenamento cloud . Locais externos são suportados, mas não são a abordagem recomendada. Veja gerenciar e tabelas externas.

O exemplo a seguir carrega dados do S3 em uma tabela usando locais externos do Unity Catalog para fornecer acesso aos dados de origem.

SQL
COPY INTO my_json_data
FROM 's3://landing-bucket/json-data'
FILEFORMAT = JSON;

Herança de privilégios de localização externa

Os privilégios de localização externa se aplicam a todos os diretórios aninhados no local especificado.

Por exemplo, se o senhor tiver acesso a um local externo definido com o URL s3://landing-bucket/raw-data, os seguintes comandos serão válidos:

SQL
COPY INTO landing_table
FROM 's3://landing-bucket/raw-data'
FILEFORMAT = PARQUET;

COPY INTO json_table
FROM 's3://landing-bucket/raw-data/json'
FILEFORMAT = JSON;

As permissões para este local externo não concedem quaisquer privilégios em diretórios acima ou paralelos ao local especificado. Por exemplo, nenhum dos seguintes comandos é válido:

SQL
COPY INTO parent_table
FROM 's3://landing-bucket'
FILEFORMAT = PARQUET;

COPY INTO sibling_table
FROM 's3://landing-bucket/json-data'
FILEFORMAT = JSON;

Namespace de três níveis para tabelas de destino

Você pode direcionar uma tabela Unity Catalog usando um namespace de três níveis (<catalog_name>.<schema_name>.<table_name>). Use os comandos USE CATALOG <catalog_name> e USE SCHEMA <schema_name> para definir o catálogo e o esquema default para sua consulta ou Notebook atual.

O exemplo a seguir carrega dados de um volume para uma tabela usando o namespace de três níveis:

SQL
COPY INTO quickstart_catalog.quickstart_schema.landing_table
FROM '/Volumes/quickstart_catalog/quickstart_schema/quickstart_volume/raw_data'
FILEFORMAT = PARQUET;

Você também pode definir o catálogo e o esquema default primeiro:

SQL
USE CATALOG quickstart_catalog;
USE SCHEMA quickstart_schema;

COPY INTO landing_table
FROM '/Volumes/quickstart_catalog/quickstart_schema/quickstart_volume/raw_data'
FILEFORMAT = PARQUET;