Todos os produtos
Search
Central de documentação

Hologres:EXTERNAL_FILES

Última atualização: Jun 28, 2026

A partir da versão V4.1 do Hologres, a função EXTERNAL_FILES permite consultar, importar e exportar diretamente arquivos de dados estruturados armazenados no Object Storage Service (OSS) sem criar tabelas externas. Este tópico descreve pré-requisitos, sintaxe, parâmetros, exemplos e limitações.

Visão geral

O recurso EXTERNAL_FILES permite executar consultas SQL diretamente em arquivos CSV, Parquet e ORC no OSS sem exigir tabelas externas. Utilize-o nos três cenários a seguir:

  • Consulta de dados: Execute instruções SELECT em arquivos CSV, Parquet e ORC armazenados no OSS.

  • Importação de dados: Carregue dados de arquivos do OSS para uma tabela interna do Hologres.

  • Exportação de dados: Grave dados de uma tabela do Hologres no OSS como arquivos CSV.

Pré-requisitos

Antes de começar, verifique se você tem:

  • Uma instância do Hologres na versão V4.1 ou posterior. Para atualizar, consulte Instance upgrades.

  • Uma conta Alibaba Cloud ou um usuário RAM. Não há suporte para contas personalizadas.

Configuração de permissões

O EXTERNAL_FILES acessa o OSS por meio de uma função RAM. Conclua as etapas a seguir antes de executar o EXTERNAL_FILES.

Etapa 1: Criar uma função RAM

  1. Faça login no console RAM e acesse RAM Roles.

  2. Clique em Create Role.

  3. Na caixa de diálogo, defina Trusted Entity Type como Cloud Service e Trusted Entity como Real-time Data Warehouse Hologres.

  4. Insira um nome para a função e conclua a criação.

Etapa 2: Conceder permissões do OSS à função

Anexe uma política do OSS à função RAM conforme as operações necessárias:

  • Leitura de dados: Anexe AliyunOSSReadOnlyAccess.

  • Gravação de dados: Anexe AliyunOSSFullAccess.

Etapa 3: Conceder a permissão GrantAssumeRole aos usuários RAM

Ignore esta etapa se o usuário que executa o SQL for uma conta Alibaba Cloud. Para usuários RAM, conceda a permissão GrantAssumeRole da seguinte forma:

  1. No console RAM, acesse Policies e clique em Create Policy.

  2. Mude para Script Editor e cole o JSON a seguir. Substitua <RoleARN> pelo ARN da função criada. Para localizar o ARN, consulte FAQ about RAM roles and STS tokens.

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "hologram:GrantAssumeRole",
          "Resource": "<RoleARN>"
        }
      ]
    }
  3. Anexe esta política ao usuário:

    • Para um usuário RAM: acesse Users > Permissions > Add Permissions.

    • Para uma função RAM: acesse Roles > Permissions > Add Permissions.

Sintaxe

Consultar dados

SELECT * FROM EXTERNAL_FILES(
    path = 'oss://bucket/path',
    format = 'csv|parquet|orc',
    oss_endpoint = 'oss_endpoint',
    role_arn = 'acs:ram::xxx:role/xxx'
    [, other parameters...]
) [AS (col1 type1, col2 type2, ...)]

Importar dados

INSERT INTO target_table
SELECT * FROM EXTERNAL_FILES(
    path = 'oss://bucket/path',
    format = 'csv|parquet|orc',
    oss_endpoint = 'oss_endpoint',
    role_arn = 'acs:ram::xxx:role/xxx'
    [, other parameters...]
) [AS (col1 type1, col2 type2, ...)]

Exportar dados

INSERT INTO EXTERNAL_FILES(
    path = 'oss://bucket/path',
    format = 'csv',
    oss_endpoint = 'oss_endpoint',
    role_arn = 'acs:ram::xxx:role/xxx'
    [, other parameters...]
) SELECT * FROM source_table;

Parâmetros

Parâmetros comuns

Parâmetro

Tipo

Descrição

Obrigatório

Padrão

Exemplo

path

STRING

Caminho do arquivo no OSS. Aceita diretórios, arquivos individuais e múltiplos caminhos separados por vírgula. Suporta curingas — veja a tabela abaixo.

Sim

oss://bucket/dir/, oss://bucket/dir/*.csv

format

STRING

Formato do arquivo. Formatos com suporte para consulta: csv, parquet, orc. A exportação aceita apenas csv.

Sim

csv

oss_endpoint

STRING

Endpoint de rede clássica do OSS. Para valores de endpoint, consulte Regions and endpoints.

Não

oss-cn-hangzhou-internal.aliyuncs.com

role_arn

STRING

ARN da função RAM usada para acessar o OSS.

Não

acs:ram::xxx:role/xxx

Curingas com suporte em path

Curinga

Descrição

Exemplo

*

Corresponde a zero ou mais caracteres

oss://bucket/dir/*.csv

?

Corresponde a qualquer caractere único

oss://bucket/dir/file?.csv

Parâmetros de leitura

Parâmetro

Tipo

Descrição

Obrigatório

Padrão

schema_deduce_file_num

INT

Quantidade máxima de arquivos a verificar durante a inferência de schema.

Não

5

schema_deduce_file_order

STRING

Ordem de verificação dos arquivos para inferência de schema. Valores válidos: latest_first, earliest_first, random.

Não

latest_first

csv_skip_header

BOOLEAN

Define se a primeira linha de um arquivo CSV deve ser tratada como cabeçalho e ignorada na leitura.

Não

false

csv_delimiter

STRING

Delimitador de colunas para arquivos CSV.

Não

, (vírgula)

Parâmetros de gravação

Parâmetro

Tipo

Descrição

Obrigatório

Padrão

target_file_size_mb

INT

Tamanho alvo de cada arquivo de saída, em MB.

Não

10

single_file

BOOLEAN

Determina se todos os dados exportados devem ser gravados em um único arquivo.

Não

false

Exemplos

Consultar um arquivo CSV

Consulte um arquivo CSV com inferência automática de schema:

SELECT * FROM EXTERNAL_FILES(
    path = 'oss://mybucket/data/',
    format = 'csv',
    csv_skip_header = 'true',
    csv_delimiter = ',',
    oss_endpoint = 'oss-cn-hangzhou-internal.aliyuncs.com',
    role_arn = 'acs:ram::123456789:role/hologres-role'
);

Consulte um arquivo CSV com schema especificado manualmente:

SELECT * FROM EXTERNAL_FILES(
    path = 'oss://mybucket/data/',
    format = 'csv',
    csv_skip_header = 'true',
    oss_endpoint = 'oss-cn-hangzhou-internal.aliyuncs.com',
    role_arn = 'acs:ram::123456789:role/hologres-role'
) AS (id int, name text, amount decimal(10,2));

Consultar um arquivo Parquet

SELECT * FROM EXTERNAL_FILES(
    path = 'oss://mybucket/parquet_data/',
    format = 'parquet',
    oss_endpoint = 'oss-cn-hangzhou-internal.aliyuncs.com',
    role_arn = 'acs:ram::123456789:role/hologres-role'
);

Consultar um arquivo ORC

SELECT * FROM EXTERNAL_FILES(
    path = 'oss://mybucket/orc_data/',
    format = 'orc',
    oss_endpoint = 'oss-cn-hangzhou-internal.aliyuncs.com',
    role_arn = 'acs:ram::123456789:role/hologres-role'
);

Importar dados para uma tabela do Hologres

-- Create the target table
CREATE TABLE orders (
    order_id int,
    customer_name text,
    amount decimal(10,2),
    PRIMARY KEY(order_id)
);

-- Import data from OSS
INSERT INTO orders
SELECT * FROM EXTERNAL_FILES(
    path = 'oss://mybucket/orders/',
    format = 'csv',
    csv_skip_header = 'true',
    oss_endpoint = 'oss-cn-hangzhou-internal.aliyuncs.com',
    role_arn = 'acs:ram::123456789:role/hologres-role'
) AS (order_id int, customer_name text, amount decimal(10,2));

Exportar dados para o OSS

Exporte para múltiplos arquivos com limite de tamanho por arquivo:

INSERT INTO EXTERNAL_FILES(
    path = 'oss://mybucket/export/',
    format = 'csv',
    oss_endpoint = 'oss-cn-hangzhou-internal.aliyuncs.com',
    role_arn = 'acs:ram::123456789:role/hologres-role',
    target_file_size_mb = '100'
) SELECT * FROM orders;

Exporte todos os dados para um único arquivo:

INSERT INTO EXTERNAL_FILES(
    path = 'oss://mybucket/export/',
    format = 'csv',
    oss_endpoint = 'oss-cn-hangzhou-internal.aliyuncs.com',
    role_arn = 'acs:ram::123456789:role/hologres-role',
    single_file = 'true'
) SELECT * FROM orders;

Usar um grupo de recursos serverless

SET hg_computing_resource = 'serverless';

SELECT * FROM EXTERNAL_FILES(
    path = 'oss://mybucket/data/',
    format = 'csv',
    oss_endpoint = 'oss-cn-hangzhou-internal.aliyuncs.com',
    role_arn = 'acs:ram::123456789:role/hologres-role'
);

Inferência de schema

Inferência automática

Se você omitir a cláusula AS, o Hologres infere o schema automaticamente:

  • Parquet e ORC: O schema é inferido a partir dos metadados do arquivo.

  • CSV com linha de cabeçalho: A inferência utiliza o cabeçalho e o conteúdo dos dados. Defina csv_skip_header = 'true' para evitar que a linha de cabeçalho seja lida como dado.

  • CSV sem linha de cabeçalho: Todos os arquivos no caminho devem ter estruturas de colunas idênticas.

O Hologres verifica até schema_deduce_file_num arquivos (padrão: 5) e une todos os schemas encontrados.

Comportamento em caso de divergência de schema

Quando o schema inferido ou especificado não corresponde exatamente ao conteúdo do arquivo, o Hologres trata as divergências da seguinte maneira:

Cenário

Comportamento

Coluna existe no schema, mas não no arquivo

Preenchida com NULL

Coluna existe no arquivo, mas não no schema

Ignorada

Tipos de coluna diferentes, porém conversíveis

Conversão automática de tipo

Tipos de coluna diferentes e não conversíveis

Retorna NULL

Exemplo: consulta de arquivos com colunas divergentes

Considere dois arquivos CSV no mesmo caminho:

orders_jan.csv — 3 colunas: order_id, customer_name, amount

orders_feb.csv — 4 colunas: order_id, customer_name, amount, region

Ao consultar o caminho sem especificar um schema, o Hologres une ambos os schemas. As linhas de orders_jan.csv retornam NULL na coluna region:

SELECT * FROM EXTERNAL_FILES(
    path = 'oss://mybucket/orders/',
    format = 'csv',
    csv_skip_header = 'true',
    oss_endpoint = 'oss-cn-hangzhou-internal.aliyuncs.com',
    role_arn = 'acs:ram::123456789:role/hologres-role'
);

order_id

customer_name

amount

region

1001

Alice

99,00

NULL

1002

Bob

149,00

NULL

2001

Carol

79,00

us-west

2002

Dave

199,00

eu-central

Para evitar valores NULL inesperados, especifique o schema explicitamente usando a cláusula AS ou garanta que todos os arquivos compartilhem a mesma estrutura de colunas.

Mapeamento de tipos

Mapeamento de tipos ORC

Tipo ORC

Tipo PostgreSQL

BOOLEAN

BOOLEAN

TINYINT / SMALLINT

SMALLINT

INT

INTEGER

BIGINT

BIGINT

FLOAT

REAL

DOUBLE

DOUBLE PRECISION

DECIMAL(p, s)

DECIMAL(p, s)

STRING

TEXT

VARCHAR(n)

VARCHAR(n)

CHAR(n)

CHAR(n)

BINARY

BYTEA

DATE

DATE

TIMESTAMP

TIMESTAMP WITHOUT TIME ZONE

TIMESTAMP WITH LOCAL TIMEZONE

TIMESTAMP WITH TIME ZONE

LIST

Array (pg_type[])

Os tipos ORC UNION , STRUCT e MAP não têm suporte.

Mapeamento de tipos Parquet

Tipo físico Parquet

Tipo lógico Parquet

Tipo PostgreSQL

BOOLEAN

BOOLEAN

INT32

INTEGER

INT32

DATE

DATE

INT32

DECIMAL(p, s)

DECIMAL(p, s)

INT64

BIGINT

INT64

TIMESTAMP_MILLIS / MICROS

TIMESTAMP / TIMESTAMPTZ

INT64

DECIMAL(p, s)

DECIMAL(p, s)

FLOAT

REAL

DOUBLE

DOUBLE PRECISION

BYTE_ARRAY

BYTEA

BYTE_ARRAY

STRING

TEXT

BYTE_ARRAY

JSON / BSON

JSONB

BYTE_ARRAY

ENUM

TEXT

FIXED_LEN_BYTE_ARRAY

DECIMAL(p, s)

DECIMAL(p, s)

FIXED_LEN_BYTE_ARRAY

UUID

UUID

LIST

LIST

Array (pg_type[])

Os tipos Parquet STRUCT e MAP não têm suporte.

Limitações

  • Formato de exportação: Apenas CSV tem suporte para exportações.

  • Busca recursiva em diretórios: Subdiretórios não são pesquisados recursivamente. Use curingas no parâmetro path para corresponder a arquivos em um diretório plano.

  • Tipos ORC sem suporte: UNION, STRUCT e MAP.

  • Tipos Parquet sem suporte: STRUCT e MAP.

  • Contas com suporte: Apenas usuários RAM e contas Alibaba Cloud. Não há suporte para contas personalizadas.

Perguntas frequentes

Recebi um erro de permissão ao exportar dados. O que fazer?

Verifique se a função RAM tem a permissão AliyunOSSFullAccess. Operações de leitura exigem apenas AliyunOSSReadOnlyAccess, mas operações de gravação (exportações) requerem acesso total.

Como controlar a quantidade e o tamanho dos arquivos exportados?

Use target_file_size_mb para definir o tamanho alvo de cada arquivo de saída (padrão: 10 MB). Para um controle mais granular sobre o número de linhas por arquivo, ajuste o parâmetro hg_experimental_query_batch_size.