Este tópico descreve como criar uma tabela externa do Hologres, incluindo como especificar uma source de dados do Hologres, conceder acesso por meio de uma função RAM ou função vinculada ao service, mapear uma tabela de destino e definir configurações do driver JDBC na instrução CREATE TABLE.
Visão geral
O Hologres é um data warehouse analítico interativo em tempo real, compatível com o protocolo PostgreSQL e integrado de forma nativa ao MaxCompute. Você pode criar tabelas externas do Hologres no MaxCompute para consultar uma source de dados do Hologres usando o driver PostgreSQL JDBC e Hologres RAM role authentication. Esse método elimina o armazenamento redundante, dispensa importações ou exportações de dados e entrega resultados de consulta com rapidez.
Limitações
-
Manipulação de dados (DML)
O MaxCompute não oferece suporte a operações
UPDATEouDELETEem tabelas externas do Hologres.-
Tabelas externas do Hologres não oferecem suporte à instrução
INSERT OVERWRITE.Para sobrescrever dados em uma tabela do Hologres com dados do MaxCompute, execute uma instrução
INSERT OVERWRITEno Hologres. Essa instrução lê dados de uma tabela externa no Hologres mapeada para uma tabela do MaxCompute. Para mais informações, consulte INSERT OVERWRITE.
-
Risco na gravação de dados
Ao gravar grandes volumes de dados em uma tabela externa do Hologres, processos paralelos de escrita são utilizados. Em casos raros, um desses processos pode reescrever dados, o que pode causar duplicação.
-
Partições
Tabelas particionadas no Hologres e no MaxCompute não possuem mapeamento direto entre si. Tabelas externas do Hologres não oferecem suporte a partições. No entanto, no modo de leitura direta, ao consultar uma tabela externa do Hologres mapeada para uma tabela-pai particionada do Hologres, o partition pruning é aplicado quando o filtro da consulta inclui uma condição na coluna de partição de uma tabela-filha particionada subjacente.
Tabelas externas do Hologres não oferecem suporte ao atributo
cluster.Tabelas externas do Hologres não oferecem suporte ao mapeamento para uma Dynamic Table do Hologres.
Consulte a lista de Supported data types.
Criar uma tabela externa do Hologres
Você pode criar uma tabela externa do Hologres por meio do RAM role authorization for Hologres ou do service-linked role authorization mode.
Considerações
Diretrizes para criação de tabelas externas
-
Se a sua instância do Hologres utiliza uma lista de permissões de IP para acesso externo, atualize-a para uma versão compatível:
Para o modo de autorização por função RAM, atualize para o Hologres V3.2 ou posterior.
Para o modo de autorização por service-linked role, atualize para o Hologres V2.0.28 ou posterior.
Após a atualização, o Hologres confia automaticamente nos IPs dos nós do MaxCompute com base na identidade do service MaxCompute ou na service-linked role. Não é mais necessário adicionar os endereços IP dos nós elásticos do MaxCompute à lista de permissões de IP da sua instância do Hologres.
É possível mapear tanto tabelas pai quanto tabelas filhas do Hologres para uma tabela externa. No entanto, uma tabela externa mapeada para uma tabela pai permite apenas leitura, não escrita.
Ao gravar dados em uma tabela externa do Hologres, o mecanismo INSERT ON CONFLICT (UPSERT) não é suportado. Se a tabela de origem do Hologres possuir uma chave primária, evite gravar dados que causem conflitos de chave primária.
Nomes de tabelas e nomes de colunas não diferenciam maiúsculas de minúsculas. Não é possível forçar a diferenciação de maiúsculas e minúsculas ao criar ou consultar tabelas e colunas.
Compatibilidade de schema
Se o schema da tabela de origem do Hologres não corresponder ao schema da tabela externa, observe os seguintes pontos:
Quantidade de colunas divergente: Se a tabela de origem tiver menos colunas que a tabela externa, a leitura de dados falha com um erro como
column "xxx" does not exist. Se a tabela de origem tiver mais colunas que a tabela externa, as colunas excedentes são ignoradas.Tipos de colunas divergentes: O MaxCompute não consegue mapear uma coluna
STRINGde uma tabela de origem do Hologres para uma colunaINTna tabela externa. O mapeamento de uma colunaINTpara uma colunaSTRINGé suportado, mas não recomendado.
Sintaxe
Ao criar uma tabela externa, especifique o StorageHandler na instrução DDL CREATE TABLE, configure a autorização por função RAM ou por service-linked role e forneça a URL de conexão JDBC para acessar a fonte de dados do Hologres.
Modo de função RAM
Para obter um exemplo de código completo, consulte Create a Hologres external table (RAM role authorization mode).
CREATE EXTERNAL TABLE [IF NOT EXISTS] <table_name>(
<col1_name> <data_type>,
<col2_name> <data_type>,
......
)
stored BY 'com.aliyun.odps.jdbc.JdbcStorageHandler'
WITH serdeproperties (
'odps.properties.rolearn'='<role_arn>')
location 'jdbc:postgresql://<endpoint>:<port>/<database>?
ApplicationName=MaxCompute&[currentSchema=<schema>&]
[useSSL={true|false}&]table=<holo_table_name>/'
tblproperties (
'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver',
'odps.federation.jdbc.target.db.type'='holo',
-- When Hologres and MaxCompute column names differ, add the odps.federation.jdbc.colmapping parameter to map columns.
-- This parameter can be omitted if column names are identical.
['odps.federation.jdbc.colmapping'='<table_column1>:<source_column1>,
<table_column2>:<source_column2>,...']
);
Modo de service-linked role
Para obter um exemplo de código completo, consulte Create a Hologres external table (service-linked role authorization mode).
O modo de autorização por service-linked role permite que o mesmo usuário RAM acesse tabelas autorizadas tanto no MaxCompute quanto no Hologres sem autorização manual. Esse modo também oferece suporte ao recurso de lista de permissões de IP do Hologres.
-- Create an external table
CREATE EXTERNAL TABLE [IF NOT EXISTS] <table_name>(
<col1_name> <data_type>,
<col2_name> <data_type>,
......
)
STORED BY 'com.aliyun.odps.jdbc.JdbcStorageHandler'
LOCATION 'jdbc:postgresql://<endpoint>:<port>/<database>?
ApplicationName=MaxCompute&[currentSchema=<schema>&]
[useSSL={true|false}&]table=<holo_table_name>/'
tblproperties (
'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver',
'odps.federation.jdbc.target.db.type'='holo',
-- When Hologres and MaxCompute column names differ, add the odps.federation.jdbc.colmapping parameter to map columns.
-- This parameter can be omitted if column names are identical.
['odps.federation.jdbc.colmapping'='<table_column1>:<source_column1>,
<table_column2>:<source_column2>,...']
);
Parâmetros
Exemplos
Etapa 1: Preparar os dados do Hologres
Pule esta etapa caso já possua um banco de dados, uma tabela e dados de teste no Hologres.
Criar um banco de dados no Hologres
Acesse o console de gerenciamento do Hologres. No canto superior esquerdo, selecione uma região.
No painel de navegação à esquerda, clique em Instances.
-
Se você não possuir uma instância, primeiro é necessário purchase a Hologres instance.
Na página Instances, clique em o nome da instância desejada.
Na página de detalhes da instância, clique em Connect to Instance.
-
Clique em a aba Metadata Management.
Clique em Create Database, insira o Database Name na caixa de diálogo exibida e mantenha os demais parâmetros com seus valores padrão.
Criar uma tabela no Hologres
Na página de detalhes da instância, clique em Connect to Instance.
Clique em a aba SQL Editor.
-
Execute as instruções a seguir para criar uma tabela e inserir dados:
CREATE TABLE IF NOT EXISTS holo ( id INT PRIMARY KEY, name TEXT ); INSERT INTO holo (id, name) VALUES (1, 'kate'), (2, 'mary'), (3, 'bob'), (4, 'tom'), (5, 'lulu'), (6, 'mark'), (7, 'haward'), (8, 'lilei'), (9, 'hanmeimei'), (10, 'lily'), (11, 'lucy'); SELECT * FROM holo ORDER BY id;
Etapa 2: Criar uma tabela externa do Hologres
RAM role
Neste modo, o criador da tabela externa incorpora uma função RAM com permissões de acesso aos dados do Hologres na definição da tabela externa. Outros usuários do MaxCompute podem então receber permissões sobre essa tabela externa. Ao acessar a tabela externa, o sistema utiliza a função RAM vinculada para acessar os dados na tabela mapeada do Hologres.
O Hologres não oferece suporte à adição de uma função RAM entre contas a uma instância de banco de dados. Portanto, o Hologres no modo de função RAM suporta apenas funções RAM da mesma conta. Da mesma forma, quando o MaxCompute acessa o Hologres por meio de uma tabela externa ou schema externo, apenas funções RAM da mesma conta são suportadas.
Pré-requisitos
Você concluiu installed and configured the MaxCompute client.
-
Você possui um projeto MaxCompute de destino no qual deseja criar a tabela externa do Hologres.
Para mais informações, consulte Create MaxCompute project.
Você criou e autorizou uma função RAM. Para mais informações, consulte Authorize a RAM Role for Hologres.
Criar a tabela externa no MaxCompute
Acesse o cliente MaxCompute e mude para o projeto MaxCompute de destino.
-
Execute a instrução a seguir para criar a tabela externa do Hologres.
O exemplo a seguir utiliza os dados preparados em Step 1: Prepare Hologres data:
Nome do banco de dados do Hologres:
holo_external_test.Schema do banco de dados do Hologres:
public.Nome da tabela do Hologres:
holo.Endpoint de rede clássica do Hologres:
hgprecn-cn-oew210ut****-cn-hangzhou-internal.hologres.aliyuncs.com:80.
CREATE EXTERNAL TABLE IF NOT EXISTS my_table_holo_jdbc ( user_id bigint, user_name string ) stored BY 'com.aliyun.odps.jdbc.JdbcStorageHandler' WITH serdeproperties ( 'odps.properties.rolearn'='acs:ram::139699392458****:role/<role name>') location 'jdbc:postgresql://hgprecn-cn-oew210ut****-cn-<region>-internal.hologres.aliyuncs.com:80 /<holo database name>?ApplicationName=MaxCompute ¤tSchema=public&table=<table name>/' tblproperties ( 'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver', 'odps.federation.jdbc.target.db.type'='holo', -- When the column names of the Hologres source table differ from those of the Hologres external table, -- add the odps.federation.jdbc.colmapping parameter for column mapping. -- This parameter can be omitted when the column names are identical. 'odps.federation.jdbc.colmapping'='user_id:id,user_name:name' ); -
Execute os comandos a seguir para consultar a tabela source do Hologres por meio da tabela externa recém-criada.
-- The following properties are required to access Hologres external tables. SET odps.sql.split.hive.bridge=true; SET odps.sql.hive.compatible=true; SET odps.table.api.enable.holo.table=true; --Enable JDBC direct read access -- Query data from the Hologres external table. SELECT * FROM my_table_holo_jdbc limit 10; -- The command returns the following result. +------------+------------+ | user_id | user_name | +------------+------------+ | 9 | hanmeimei | | 4 | tom | | 7 | haward | | 2 | mary | | 5 | lulu | | 8 | lilei | | 10 | lily | | 1 | kate | | 6 | mark | | 11 | lucy | +------------+------------+ -
Utilize a tabela externa do Hologres para trocar dados com o Hologres e realizar análises federadas.
-
Grave dados processados no MaxCompute no Hologres por meio da tabela externa para acelerar análises e serviços on-line.
-- The following properties are required to access Hologres external tables. SET odps.sql.split.hive.bridge=true; SET odps.sql.hive.compatible=true; SET odps.table.api.enable.holo.table=true; --Enable JDBC direct read access -- Insert data into the Hologres external table. INSERT INTO my_table_holo_jdbc VALUES (12,'alice'); -- Query data from the Hologres external table. SELECT * FROM my_table_holo_jdbc; -- The command returns the following result. +------------+------------+ | user_id | user_name | +------------+------------+ | 9 | hanmeimei | | 4 | tom | | 7 | haward | | 2 | mary | | 5 | lulu | | 12 | alice | | 8 | lilei | | 10 | lily | | 1 | kate | | 11 | lucy | | 6 | mark | | 3 | bob | +------------+------------+ -
Armazene tabelas de dimensão atualizadas com frequência no Hologres para possibilitar atualizações em tempo real. O MaxCompute acessa a tabela de dimensão por meio de uma tabela externa e a combina (join) com uma tabela de fatos no MaxCompute para análise federada.
-- The following properties are required to access Hologres external tables. SET odps.sql.split.hive.bridge=true; SET odps.sql.hive.compatible=true; -- Create a MaxCompute internal table. CREATE TABLE holo_test AS SELECT * FROM my_table_holo_jdbc; -- Join the MaxCompute internal table with the Hologres external table for analysis. SELECT * FROM my_table_holo_jdbc t1 INNER JOIN holo_test t2 ON t1.id=t2.id; -- The command returns the following result. +------------+------------+------------+------------+ | user_id | user_name |user_id2 | user_name2 | +------------+------------+------------+------------+ | 9 | hanmeimei | 9 | hanmeimei | | 4 | tom | 4 | tom | | 7 | haward | 7 | haward | | 2 | mary | 2 | mary | | 5 | lulu | 5 | lulu | | 12 | alice | 12 | alice | | 8 | lilei | 8 | lilei | | 10 | lily | 10 | lily | | 1 | kate | 1 | kate | | 11 | lucy | 11 | lucy | | 6 | mark | 6 | mark | | 3 | bob | 3 | bob | +------------+------------+------------+------------+
-
Service-linked role
Neste modo, é necessário criar uma função vinculada ao service para acessar os dados do Hologres. Para evitar acessos não autorizados, esse modo encaminha a identidade do usuário ao Hologres para autenticação. Assim, o usuário precisa ter permissões tanto na tabela externa quanto na tabela subjacente do Hologres.
Pré-requisitos
Você concluiu installed and configured the MaxCompute client.
-
Você possui um projeto MaxCompute de destino no qual deseja criar a tabela externa do Hologres.
Para mais informações, consulte Create MaxCompute project.
Uma conta com o mesmo nome da sua conta MaxCompute existe no Hologres, e essa conta possui permissões de leitura e gravação na tabela de destino.
Esse modo de autorização por função vinculada ao service é compatível apenas com o Hologres V1.3 e versões posteriores. Atualmente, esse modo suporta apenas a leitura de tabelas externas do Hologres, e não a gravação.
Criar a tabela externa no MaxCompute
Acesse o cliente MaxCompute e mude para o projeto MaxCompute de destino.
-
Execute a instrução a seguir para criar a tabela externa do Hologres.
O exemplo a seguir utiliza os dados preparados em Step 1: Prepare Hologres data:
Nome do banco de dados do Hologres:
holo_external_test.Schema do banco de dados do Hologres:
public.Nome da tabela do Hologres:
holo.Endpoint de rede clássica do Hologres:
hgprecn-cn-oew210ut****-cn-hangzhou-internal.hologres.aliyuncs.com:80.
CREATE EXTERNAL TABLE IF NOT EXISTS holo_mc_external_dbl ( user_id int, user_name string ) STORED BY 'com.aliyun.odps.jdbc.JdbcStorageHandler' location 'jdbc:postgresql://hgpostcn-cn-****-cn-<region>-internal.hologres.aliyuncs.com:80 /<holo database name>?ApplicationName=MaxCompute ¤tSchema=public&table=<table name>/' TBLPROPERTIES ( 'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver', 'odps.federation.jdbc.target.db.type'='holo', -- When the column names of the Hologres source table differ from those of the Hologres external table, -- add the odps.federation.jdbc.colmapping parameter for column mapping. -- This parameter can be omitted when the column names are identical. 'odps.federation.jdbc.colmapping'='user_id:id,user_name:name' ); -
Consulte a tabela externa.
SELECT * FROM holo_mc_external_dbl; -- The command returns the following result. +------------+------------+ | user_id | user_name | +------------+------------+ | 9 | hanmeimei | | 4 | tom | | 7 | haward | | 2 | mary | | 5 | lulu | | 12 | alice | | 8 | lilei | | 10 | lily | | 1 | kate | | 11 | lucy | | 6 | mark | | 3 | bob | +------------+------------+
Ativar leitura direta para tabelas externas do Hologres
Por padrão, o MaxCompute lê dados de tabelas externas do Hologres por meio de uma conexão JDBC. Para melhorar o desempenho, é possível ativar o modo de leitura direta, que permite ao MaxCompute acessar a camada de armazenamento do Hologres diretamente. Esse modo oferece os seguintes benefícios:
Estabilidade na leitura de tabelas.
Redução significativa da latência de leitura, acelerando as consultas de dados.
Funciona em conjunto com predicate pushdown para enviar condições de filtro ao lado do Hologres, reduzindo o volume de dados varridos e diminuindo custos.
Diminui drasticamente o número de conexões ao FE do Hologres, minimizando a sobrecarga de desempenho na instância — a maioria das consultas exige apenas uma única conexão.
Limitações
Ao ativar o modo de leitura direta para o Hologres, as seguintes limitações se aplicam. Se essas condições não forem atendidas, a consulta retorna automaticamente ao modo JDBC.
-
Requisitos de versão
A instância do Hologres deve estar na versão V1.3.34 ou posterior. O recurso de leitura direta não é compatível com versões anteriores.
-
Restrições de tipo de tabela
O modo de leitura direta não é compatível com tabelas de armazenamento frio do Hologres.
Tabelas orientadas a linhas do Hologres também não são compatíveis com o modo de leitura direta.
-
Limitações de mapeamento de tipos de dados
Ao utilizar o modo de leitura direta, o mapeamento de um tipo Timestamp With Time Zone no Hologres para um tipo TIMESTAMP no MaxCompute pode causar pequenas discrepâncias de horário. As diferenças são as seguintes:
-
Discrepância no valor do horário
Para timestamps anteriores a
1900-12-31 15:54:15, o horário retornado pelo MaxCompute está adiantado em 5 minutos e 44 segundos.Para timestamps entre
1900-12-31 15:54:16e1969-12-31 23:59:58, o horário retornado pelo MaxCompute está adiantado em 1 segundo.Para timestamps posteriores a
1969-12-31 23:59:59, os horários no Hologres e no MaxCompute são idênticos.
-
Deslocamento de fuso horário
Por exemplo, se o fuso horário do MaxCompute for UTC+8 e uma coluna Timestamp With Time Zone no Hologres contiver
2000-01-01 00:00:00, o MaxCompute retorna2000-01-01 08:00:00.Outro exemplo: se o fuso horário do MaxCompute for UTC+8 e uma coluna Timestamp With Time Zone no Hologres contiver
1969-01-01 00:00:00, o MaxCompute retorna1969-01-01 08:00:01.
-
-
Restrição de mesma região
Devido a restrições de conectividade de rede, o MaxCompute pode acessar apenas instâncias do Hologres na mesma região. O acesso entre regiões falha com o seguinte erro:
FAILED: ODPS-0010000:System internal error - fuxi job failed, caused by: Pangu request failed with error code 3. Se a instância do Hologres utilizar uma arquitetura primária/secundária, especifique apenas a instância primária na URL de conexão, e não uma instância secundária.
Limitação adicional para o modo Foreign Server: é necessário ativar a opção de sintaxe no nível de schema para o projeto MaxCompute.
Ativar o modo de leitura direta
Para ativar o modo de leitura direta na sua sessão, adicione o seguinte comando antes da consulta SQL no MaxCompute:
SET odps.table.api.enable.holo.table=true;
Também é possível ativar ou desativar o modo de leitura direta no nível do projeto.
-- You can enable direct read and disable JDBC fallback at the project level.
-- Enable direct read at the project level:
setproject odps.table.api.enable.holo.table=true; -- Set to true to enable, false to disable.
-- Disable the default fallback to JDBC:
setproject odps.table.api.allow.fallback.jdbc=false; -- Set to true to allow fallback, false to prevent it.
Verificar o modo de leitura direta
Para verificar se uma consulta utilizou o modo de leitura direta, confira os logs no Logview. Para mais informações sobre como usar o Logview, consulte Use Logview 2.0 to view job running information.
Na aba Summary do Logview, localize o campo external holo tables. O formato é o seguinte:
<project_name>.<table_name>:<access mode>[<(fallback reason)>]
Parâmetros:
Parâmetro | Descrição |
project_name | Nome do projeto. |
table_name | Nome da tabela. |
access mode | Modo de acesso da tabela externa. Valores válidos:
|
Quando um job que utiliza o modo de leitura direta encontra uma limitação, ele reverte automaticamente para o modo JDBC. Sob cargas de trabalho intensas, esse fallback pode consumir recursos significativos do pool de conexões do Hologres, e a transferência de dados no modo JDBC é muito menos eficiente do que no modo de leitura direta. Consequentemente, esses recursos podem ser liberados lentamente, aumentando a carga na instância do Hologres.
Em casos extremos, fallbacks frequentes podem impactar outros services críticos que dependem da mesma instância do Hologres. Para evitar isso, desative o mecanismo de fallback automático adicionando o parâmetro set odps.table.api.allow.fallback.jdbc=false; aos seus jobs. Com isso, os jobs falham em vez de reverter silenciosamente, prevenindo degradação inesperada de desempenho.
Pushdown de predicados para tabelas externas do Hologres
Ao acessar tabelas externas do Hologres, o MaxCompute consegue enviar as condições de filtro da consulta diretamente ao Hologres para execução (pushdown de predicados). Dessa forma, os dados são filtrados antecipadamente no lado do Hologres, o que reduz a transferência de dados e melhora o desempenho das consultas. Os seguintes cenários são suportados:
Hologres Snapshot PPD: A expressão de filtro é convertida em uma cláusula SQL WHERE e enviada ao servidor do Hologres por meio do parâmetro filter de
holo_create_table_snapshot().Hologres JDBC PPD: A condição WHERE é adicionada à instrução SQL JDBC, e o Hologres filtra os dados na camada SQL.
ORC row group column-level filtering: Filtragem em nível de arquivo no lado do MaxCompute. Para cada arquivo ORC, um SearchArgument é construído e passado ao leitor ORC, que utiliza estatísticas de coluna (min/max/count) para ignorar grupos de linhas que não correspondem ao filtro.
Os seguintes cenários terão suporte no futuro:
Poda de partições: Para tabelas fisicamente particionadas do Hologres, a expressão de filtro é avaliada em relação a cada valor de partição antes da criação do snapshot. Partições que não correspondem ao filtro são ignoradas, e nenhum snapshot é criado para elas.
Filtragem por chave de segmento: Após o retorno do snapshot pelo Hologres, o MaxCompute analisa os valores min/max da chave de segmento nos metadados de cada arquivo e compara o intervalo com a expressão de filtro. Se o intervalo da chave de segmento de um arquivo não tiver nenhuma sobreposição com o filtro, o arquivo é ignorado.
Filtragem por ID de distribuição: Suportada apenas para Liquid Tables. Cada arquivo pode conter linhas com múltiplos IDs de distribuição. Após a leitura de um RecordBatch, as linhas são filtradas pelo intervalo de ID de distribuição.
Uso
Cenário 1: PPD de Snapshot do Hologres
Em cenários de leitura direta do Hologres, as expressões de filtro são convertidas em cláusulas SQL WHERE para tabelas de partição lógica e enviadas ao servidor do Hologres como parâmetro filter de holo_create_table_snapshot(). Isso permite que o Hologres descarte arquivos que não correspondem ao filtro no lado do servidor durante a criação do snapshot, reduzindo a quantidade de arquivos retornados ao MaxCompute e minimizando a transferência de dados.
Cenário | Suporte a PPD em cenários de leitura direta do Hologres |
Parâmetro principal | Valores válidos para o parâmetro
Exemplo de sintaxe:
|
Tipos suportados | INT、BIGINT、STRING、DATE、TIMESTAMP、BINARY |
Limitações | O pushdown de predicados não suporta os seguintes casos:
|
Cenários aplicáveis | Instâncias do Hologres que suportam PPD. A versão da instância deve atender a um dos seguintes requisitos:
|
Cenário 2: PPD via JDBC do Hologres
Quando a leitura direta do Hologres está desativada (odps.table.api.enable.holo.table=false), as consultas são executadas pelo caminho JDBC. Nesse caso, o PPD funciona adicionando a cláusula WHERE à instrução SQL JDBC enviada ao Hologres, que realiza a filtragem na camada SQL. Essa abordagem difere do PPD em cenários de leitura direta do Hologres:
PPD de leitura direta: filtra arquivos no nível do snapshot
PPD via JDBC: filtra linhas no nível da consulta SQL
Cenário | Suporte a PPD em cenários de leitura JDBC do Hologres |
Parâmetro principal | Valores do parâmetro
Exemplo de sintaxe do parâmetro:
|
Tipos suportados | INT、BIGINT、DOUBLE、FLOAT、STRING、DATE、TIMESTAMP、TIMESTAMP_NTZ |
Limitações | O pushdown de predicados não suporta os seguintes casos:
|
Cenários aplicáveis |
|
Cenário 3: Filtragem em nível de coluna por grupo de linhas ORC
Filtragem em nível de arquivo no lado do MaxCompute. Para cada arquivo ORC, um SearchArgument é construído e passado ao leitor ORC. O leitor ORC utiliza as estatísticas de coluna (min/max/count) de cada stripe/grupo de linhas para determinar se o grupo de linhas inteiro pode ser ignorado.
A poda em nível de arquivo é realizada no lado do MaxCompute
Depende de o parâmetro de PPD estar ativado no lado do Hologres.
Tabelas não particionadas, tabelas fisicamente particionadas e tabelas logicamente particionadas são todas suportadas.
Cenário | Filtragem em nível de coluna por grupo de linhas ORC |
Parâmetro principal |
|
Tipos suportados | BOOLEAN、INT、BIGINT、FLOAT、DOUBLE、DECIMAL、STRING、DATE、TIMESTAMP |
Exemplos
Hologres Snapshot PPD
-
Prepare os dados. Na sua instância Hologres, crie uma tabela de teste e insira dados.
CREATE TABLE test_multi_type_ppd ( c_id INT NOT NULL, c_boolean BOOLEAN, c_int INT, c_bigint BIGINT, c_double DOUBLE precision, c_float REAL, c_string TEXT, c_date DATE, c_timestamp_tz TIMESTAMPTZ, c_timestamp_ntz TIMESTAMP ) WITH (SEGMENT_KEY = 'c_id'); -- Insert 10 rows of data. INSERT INTO test_multi_type_ppd VALUES (1, true, 10, 1000, 1.25, 1.5, 'alpha', '2023-01-01', '2023-01-01 10:00:00+08', '2023-01-01 02:00:00'), (2, false, 20, 2000, -2.50, 2.5, 'beta', '2023-01-02', '2023-01-02 10:00:00+08', '2023-01-02 02:00:00'), (3, true, 30, 3000, 3.75, -3.5, 'gamma', '2023-01-03', '2023-01-03 10:00:00+08', '2023-01-03 02:00:00'), (4, false, 40, 4000, 4.00, 4.5, 'delta', '2023-01-04', '2023-01-04 10:00:00+08', '2023-01-04 02:00:00'), (5, true, 50, 5000, 5.50, 5.5, 'epsilon', '2023-01-05', '2023-01-05 10:00:00+08', '2023-01-05 02:00:00'), (6, false, 60, 6000, 6.60, 6.0, 'zeta', '2023-01-06', '2023-01-06 10:00:00+08', '2023-01-06 02:00:00'), (7, true, 70, 7000, 7.70, -7.0, 'eta', '2023-01-07', '2023-01-07 10:00:00+08', '2023-01-07 02:00:00'), (8, false, 80, 8000, 8.80, 8.0, 'theta', '2023-01-08', '2023-01-08 10:00:00+08', '2023-01-08 02:00:00'), (9, true, 90, 9000, -9.90, 9.0, 'iota', '2023-01-09', '2023-01-09 10:00:00+08', '2023-01-09 02:00:00'), (10, false, 100, 10000, 10.10, 10.0, 'kappa', '2023-01-10', '2023-01-10 10:00:00+08', '2023-01-10 02:00:00'); SELECT * FROM test_multi_type_ppd; -
Crie uma tabela externa Hologres no MaxCompute.
CREATE EXTERNAL TABLE test_multi_type_ppd ( c_id int, c_boolean boolean, c_int int, c_bigint bigint, c_double double, c_float float, c_string string, c_date date, c_timestamp_tz timestamp, c_timestamp_ntz timestamp_ntz ) STORED BY 'com.aliyun.odps.jdbc.JdbcStorageHandler' WITH serdeproperties ('odps.properties.rolearn'='acs:ram::139****:role/<role name>') LOCATION 'jdbc:postgresql://<holo-endpoint>/<db>?currentSchema=public&table=test_multi_type_ppd' TBLPROPERTIES ( 'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver', 'odps.federation.jdbc.target.db.type'='holo' ); -
Consulte a tabela externa.
-- Enable Hologres direct read. SET odps.table.api.enable.holo.table=true; -- Set the PPD mode (off, on, or debug). SET odps.external.holo.read.table.rules="{predicate_pushdown_mode:on}"; -- Configure the type system. SET odps.sql.type.system.odps2=true; SET odps.sql.decimal.odps2=true; -- Allow expressions to be pushed down to TableScan. This is typically enabled by default. SET odps.use.builtin.function.input.range=true; -- set odps.mcqa.disable=true; SELECT * FROM test_multi_type_ppd WHERE c_id = 3; -- The query returns the following result. +------+-----------+-------+------------+------------+---------+----------+--------+----------------+-----------------+ | c_id | c_boolean | c_int | c_bigint | c_double | c_float | c_string | c_date | c_timestamp_tz | c_timestamp_ntz | +------+-----------+-------+------------+------------+---------+----------+--------+----------------+-----------------+ | 3 | true | 30 | 3000 | 3.75 | -3.5 | gamma | 2023-01-03 | 2023-01-03 10:00:00 | 2023-01-03 02:00:00 | +------+-----------+-------+------------+------------+---------+----------+--------+----------------+-----------------+ -- Check the Summary section in Logview. The following information is displayed: external holo tables: **.default.test_multi_type_ppd:Optimized Holo-side PPD enabled --> Filter pushdown applied successfully Snapshot Id: 56-1-100*** With-filter file count: 2 With-filter create snapshot duration: 19ms
Hologres JDBC PPD
-
Prepare os dados. Na sua instância Hologres, crie uma tabela de teste e insira dados.
CREATE TABLE test_multi_type_ppd ( c_id INT NOT NULL, c_boolean BOOLEAN, c_int INT, c_bigint BIGINT, c_double DOUBLE precision, c_float REAL, c_string TEXT, c_date DATE, c_timestamp_tz TIMESTAMPTZ, c_timestamp_ntz TIMESTAMP ) WITH (SEGMENT_KEY = 'c_id'); -- Insert 10 rows of data. INSERT INTO test_multi_type_ppd VALUES (1, true, 10, 1000, 1.25, 1.5, 'alpha', '2023-01-01', '2023-01-01 10:00:00+08', '2023-01-01 02:00:00'), (2, false, 20, 2000, -2.50, 2.5, 'beta', '2023-01-02', '2023-01-02 10:00:00+08', '2023-01-02 02:00:00'), (3, true, 30, 3000, 3.75, -3.5, 'gamma', '2023-01-03', '2023-01-03 10:00:00+08', '2023-01-03 02:00:00'), (4, false, 40, 4000, 4.00, 4.5, 'delta', '2023-01-04', '2023-01-04 10:00:00+08', '2023-01-04 02:00:00'), (5, true, 50, 5000, 5.50, 5.5, 'epsilon', '2023-01-05', '2023-01-05 10:00:00+08', '2023-01-05 02:00:00'), (6, false, 60, 6000, 6.60, 6.0, 'zeta', '2023-01-06', '2023-01-06 10:00:00+08', '2023-01-06 02:00:00'), (7, true, 70, 7000, 7.70, -7.0, 'eta', '2023-01-07', '2023-01-07 10:00:00+08', '2023-01-07 02:00:00'), (8, false, 80, 8000, 8.80, 8.0, 'theta', '2023-01-08', '2023-01-08 10:00:00+08', '2023-01-08 02:00:00'), (9, true, 90, 9000, -9.90, 9.0, 'iota', '2023-01-09', '2023-01-09 10:00:00+08', '2023-01-09 02:00:00'), (10, false, 100, 10000, 10.10, 10.0, 'kappa', '2023-01-10', '2023-01-10 10:00:00+08', '2023-01-10 02:00:00'); SELECT * FROM test_multi_type_ppd; -
Crie uma tabela externa Hologres no MaxCompute.
CREATE EXTERNAL TABLE test_multi_type_ppd ( c_id int, c_boolean boolean, c_int int, c_bigint bigint, c_double double, c_float float, c_string string, c_date date, c_timestamp_tz timestamp, c_timestamp_ntz timestamp_ntz ) STORED BY 'com.aliyun.odps.jdbc.JdbcStorageHandler' WITH serdeproperties ( 'odps.properties.rolearn'='acs:ram::122**79014:role/<role name>') LOCATION 'jdbc:postgresql://hgprecn-cn-oew210ut****-cn-hangzhou-internal.hologres.aliyuncs.com:80/<holo database name>?ApplicationName=MaxCompute¤tSchema=public&useSSL=true&table=<table name>/' TBLPROPERTIES ( 'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver', 'odps.federation.jdbc.target.db.type'='holo' ); -
Consulte a tabela externa.
-- Disable Hologres direct read and use the JDBC path. SET odps.table.api.enable.holo.table=false; SET odps.table.api.enable.holo.table.auto.fallback=false; -- Enable JDBC PPD. SET odps.external.hive.scan.ppd.enabled=true; -- Allow expressions to be pushed down to TableScan. -- This is enabled by default in most cases. SET odps.use.builtin.function.input.range=true; -- Enable common table. SET odps.sql.common.table.planner.ext.hive.bridge=true; SET odps.sql.common.table.planner.ext.hive.bridge.v2=true; -- After PPD is enabled, TableScan reads only one record. SELECT * FROM test_multi_type_ppd WHERE c_id = 3; -- The query result is as follows: +------+-----------+-------+------------+------------+---------+----------+--------+----------------+-----------------+ | c_id | c_boolean | c_int | c_bigint | c_double | c_float | c_string | c_date | c_timestamp_tz | c_timestamp_ntz | +------+-----------+-------+------------+------------+---------+----------+--------+----------------+-----------------+ | 3 | true | 30 | 3000 | 3.75 | -3.5 | gamma | 2023-01-03 | 2023-01-03 10:00:00 | 2023-01-03 02:00:00 | +------+-----------+-------+------------+------------+---------+----------+--------+----------------+-----------------+ -- Check the stdout details of the instance in Logview. The following messages are displayed: [2026-07-22 10:02:41] Volcano instance executor [MainThreadID: 222960] Jdbc HoloRecordReader query conditions: (c_id = 3) JDBC HoloRecordReader: Query predicate pushdown succeeded. JdbcShardRecordReader getSelectQuery: SELECT c_id, c_boolean, c_int, c_bigint, c_double, c_float, c_string, c_date, c_timestamp_tz, c_timestamp_ntz FROM test_multi_type_ppd0721 AS test_multi_type_ppd0721 WHERE ( hg_shard_id = 9) AND ((c_id = 3))
ORC row group column-level filtering
Este método é indicado para cenários com grandes volumes de dados. Cada row group no ORC contém 10.000 linhas, portanto o efeito da filtragem não é perceptível quando o volume de dados é muito pequeno.
-
Prepare os dados. Crie uma tabela de teste na instância Hologres.
DROP TABLE IF EXISTS test_2m_data; BEGIN; CREATE TABLE test_2m_data ( id INT NOT NULL, name TEXT NOT NULL ); -- Set a distribution key to avoid data skew and improve batch write performance. CALL set_table_property('test_2m_data', 'distribution_key', 'id'); COMMIT; INSERT INTO test_2m_data (id, name) SELECT g AS id, 'user_' || g AS name FROM generate_series(1, 2000000) AS g; SELECT COUNT(*) FROM test_2m_data; -
Crie uma tabela externa Hologres no MaxCompute.
CREATE EXTERNAL TABLE ext_holo_test_2m_data ( id INT , name STRING ) STORED BY 'com.aliyun.odps.jdbc.JdbcStorageHandler' WITH serdeproperties ( 'odps.properties.rolearn'='acs:ram::*****:role/<role_name>') LOCATION 'jdbc:postgresql://hgpostcn-cn-2bj4lnv16008-cn-<region>-internal.hologres.aliyuncs.com:80/<holo_database>?currentSchema=public&table=test_2m_data' TBLPROPERTIES ( 'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver', 'odps.federation.jdbc.target.db.type'='holo' ); -
Consulte os dados da tabela externa.
-- Enable Hologres direct read SET odps.table.api.enable.holo.table=true; -- Enable PPD SET odps.external.holo.use.predicate.pushdown=true; -- Set the PPD mode SET odps.external.holo.read.table.rules="{predicate_pushdown_mode:on}"; SELECT * FROM ext_holo_test_2m_data where id>100 and id<100000;Verifique os detalhes de stdout da instância no LogView. A filtragem foi bem-sucedida se as seguintes condições forem atendidas:
Os campos IOCount e IOLatencyPercentiles aparecem no TableScan1.
O valor de ReadRowCount é menor que o de RequestedRowCount no TableScan1.
37 Filter1 99899 0 99998998 {"PMS":{"S":24584}} 38 GlobalInit 0 769 0 {"CallBack":{"T":1},"CodeGenDCE":{"T":6393},"CodeGenMajorPass":{"T":13954},"CreateCursor":{"T":41350}, "CreateOperator":{"T":309351},"JitFunction":{"T":13027},"LoadAndParseIR":{"T":38273},"OpenShuffleRW":{"T":30}, "parseTableScanInfo":{"T":4551}} 39 TableScan1 163840 1634 100269 {"PMS":{"S":20480},"actualSplitFileCount":0,"actualSplitFileStats":{"avg":0,"max":0,"min":9223372036854775807}, "plannedSplitFileCount":0,"plannedSplitFileStats":{"avg":0,"max":0,"min":9223372036854775807}} {"DecodingCount":320,"DecodingInBytes":147068,"DecodingLatencyUs":1224,"DecodingOutBytes":1310720, "DeltaFileInclusiveLatencyUs":76,"IOBlockingLatencyUs":424255,"IOCount":60,"IOLatencyPercentiles": "{\"Count\":\"60\",\"Percentiles\":\"[[0,2835], [0.5,6183], [0.9,6183], [0.95,6183], [0.99,6183], [0.999,6752], [1, 15206]]\",\"Total\":\"495889\"}","IOReadBytes":27988440,"MaxMemoryUsageBytes":1936240,"ReadRawSize":2346495, "ReadRowCount":163840,"ReaderCount":1,"ReaderInclusiveLatencyUs":447950,"RequestedRowCount":2000000, "StringDirectReadOutBytes":169113,"Type":"OrcReader","VectorBatchConversionLatencyUs":1636} 40 TableScan1@CommonTableReader 0 0 nan {"PMS":{"S":19456}} 41 fuxi 0 0 nan {"PMS":{"S":0}} 42 inst 0 0 nan {"APMS":{"S":0},"PMFM":{"S":1073741824},"PMS":{"S":3246003}}Na saída acima, o operador TableScan1 contém os campos
IOCounteIOLatencyPercentiles, e o valor deReadRowCount(163840) é menor que o deRequestedRowCount(2000000). Isso indica que a filtragem por predicate pushdown foi bem-sucedida.
Importação e exportação de dados do Hologres
Tipos de dados compatíveis
-
Limitações do tipo decimal
Em tabelas externas do Hologres criadas no MaxCompute, o tipo de dados
DECIMALé fixado emdecimal(38,18)e não pode ser alterado. Se a tabela source tiver menos casas decimais, defina a coluna como tipoSTRINGna tabela externa do MaxCompute e, em seguida, utilize a funçãoCASTpara converter explicitamente os dados no momento do uso. -
Limitações de tipos complexos
Tabelas externas do Hologres criadas no MaxCompute não oferecem suporte a tipos de dados complexos como
Array,MapouStruct. -
Outros tipos incompatíveis
Tipos de dados do Hologres, como
MONEY, não são compatíveis porque não existem tipos de dados correspondentes no MaxCompute.
A tabela a seguir apresenta o mapeamento de tipos de dados entre o Hologres e o MaxCompute.
Tipo do Hologres | Tipo do MaxCompute | Leitura JDBC | Escrita JDBC | Leitura direta (odps.table.api.enable.holo.table=true) | Descrição |
INTEGER (alias: INT ou INT4) | INT | Inteiro com sinal de 32 bits. | |||
TEXT | STRING, VARCHAR | Tipo de string com limite de comprimento de 8 MB. | |||
SMALLINT | SMALLINT | Inteiro com sinal de 16 bits. | |||
INT2 | SMALLINT | Número inteiro com sinal de 16 bits. | |||
BIGINT (alias: INT8) | BIGINT | Inteiro com sinal de 64 bits. | |||
BYTEA | BINARY | Atualmente, o tipo de dado binário possui limite de 8 MB. O tipo de dado | |||
REAL (alias: FLOAT4) | FLOAT | Número de ponto flutuante binário de 32 bits. | |||
DOUBLE PRECISION (alias: FLOAT8) | DOUBLE | Número de ponto flutuante binário de 64 bits. | |||
BOOLEAN (alias: BOOL) | BOOLEAN | Tipo BOOLEAN. | |||
TIMESTAMP | TIMESTAMP_NTZ | O tipo Ele corresponde ao tipo | |||
TIMESTAMP WITH TIME ZONE (alias: TIMESTAMPTZ) | TIMESTAMP | O tipo de dado timestamp possui precisão de nanossegundos e utiliza o formato A conversão de precisão subjacente é tratada automaticamente. | |||
DECIMAL (alias: NUMERIC) | DECIMAL(precision,scale) | Tipo numérico exato de base 10.
No MaxCompute, o tipo de dado | |||
CHAR(n) | CHAR(n) | No MaxCompute, No Hologres, o tamanho máximo do tipo de dado | |||
VARCHAR(n) | VARCHAR(n) | O tipo de dado No Hologres, o tamanho máximo de |
DATE | DATE | O tipo de dados é date no formato | |||
INT4[] | ARRAY<INT> | Os arrays do Hologres são mapeados para os tipos | |||
INT8[] | ARRAY<BIGINT> | ||||
FLOAT4[] | ARRAY<FLOAT> | ||||
FLOAT8[] | ARRAY<DOUBLE> | ||||
BOOLEAN[] | ARRAY<BOOLEAN> | ||||
TEXT[] | ARRAY<STRING> | ||||
JSONB | JSON | O tipo | |||
JSON | STRING | Ao utilizar JDBC, o tipo | |||
SERIAL (auto-increment) | INT | O MaxCompute lê os campos | |||
RoaringBitmap | Not supported | Não existe um tipo correspondente no MaxCompute. | |||
RoaringBitmap64 | Not supported | O MaxCompute não possui um tipo equivalente. | |||
BIT(n) | Not supported | Esse tipo não tem correspondente no MaxCompute. | |||
VARBIT(n) | Not supported | Não há tipo correspondente no MaxCompute. | |||
INTERVAL | Not supported | O MaxCompute não oferece suporte a esse tipo de dados. | |||
TIMETZ | Not supported | Não existe tipo equivalente no MaxCompute. | |||
TIME | Not supported | Tipo sem correspondência no MaxCompute. | |||
INET | Not supported | Não há um tipo correspondente no MaxCompute. |
MONEY | Não suportado | Não existe um tipo correspondente no MaxCompute. | |||
OID | Não suportado | O MaxCompute não possui um tipo equivalente. | |||
UUID | Não suportado | Nenhum tipo correspondente existe no MaxCompute. |
FAQ
Erro ODPS-0130071 ao ler dados do Hologres diretamente
-
Problema
Ao ler dados do Hologres no modo de leitura direta, o job falha com um erro semelhante a
ODPS-0130071 Failed to split to equal size...max count: 7777. Por exemplo:ODPS-0130071:[0,0] Semantic analysis exception - physical plan generation failed: storage/table/src/input_splits_builder.cpp(195): StorageException: Failed to split to equal size, total size: 2143570729934, min size: 268435456, max size: 272629760, max count: 7777, split size: 275629513, split count: 7777 -
Causa
Quando o MaxCompute lê dados do Hologres, a estratégia padrão de divisão de dados pode fazer com que o número de instâncias de mapper exceda o limite de concorrência de 7.777.
NotaEsse limite impede a execução de jobs com um número excessivo de mappers, protegendo a estabilidade dos arquivos e das conexões de rede do Hologres.
-
Solução
Para resolver esse erro, defina os parâmetros a seguir.
SET odps.external.holo.mapper.instances=10000; -- Increase the concurrency limit. The maximum value is 10,000. SET odps.sql.mapper.split.size=512; -- Adjust the job concurrency. The maximum value is 512 MB.
Jobs SQL lentos em tabelas externas do Hologres
-
Problema
O desempenho é lento ao usar o SDK para pesquisar dados em uma tabela externa do MaxCompute.
-
Solução
Tabelas externas apresentam lentidão porque suportam apenas varredura completa da tabela. Para obter melhor desempenho, utilize uma tabela interna do MaxCompute.
Erro quando o nome de uma coluna é uma palavra reservada
-
Problema
Se o nome de uma coluna na tabela do Hologres for uma palavra reservada, as consultas podem falhar com os seguintes erros caso não haja configuração especial:
ODPS-0123131:User defined function exception - SQLException in nextKeyValueCaused by: org.postgresql.util.PSQLException: ERROR: syntax error at or near "," -
Solução
Adicione o parâmetro
odps.federation.jdbc.colmappingpara mapear as colunas da tabela source do Hologres para as colunas da tabela externa do Hologres.Por exemplo, se a tabela source do Hologres contém a palavra reservada
"offset"como nome de coluna, adicione o parâmetro'odps.federation.jdbc.colmapping'='offset:"offset"'ao criar a tabela externa do Hologres.
Erro password authentication failed for user "mcslr$STS.**" no modo de função vinculada ao service
-
Problema
Quando um usuário RAM ou uma função RAM lê uma tabela externa do Hologres utilizando o modo de autorização por função vinculada ao service, o job pode falhar com o erro
password authentication failed for user "mcslr$STS.******". Veja a seguir um exemplo de mensagem de erro:Caused by: java.lang.RuntimeException: java.lang.RuntimeException: org.postgresql.util.PSQLException: ERROR: pooler: c0a981a2413b5: password authentication failed for user "*******$V2#****#TMP.3KvMuCpXhuMbeZsbpaE****m738WfEw73rze ohJUeXxhsKza1khCxdKSJQAU5CFac*****qDCA#STS.NZFkZ3TbJNmAjS2TKLdUHHdiW#**.*.*.***" at org.apache.hadoop.mapreduce.lib.db.DBInputFormat.setConf(DBInputFormat.java:171) at com.aliyun.odps.jdbc.wrapper.InputFormatWrapper.checkAndInitDbInputFormat(InputFormatWrapper.java:48) ... 45 more Caused by: java.lang.RuntimeException: org.postgresql.util.PSQLException: ERROR: pooler: c0a981a2413b5: password authentication failed for user "*******$V2#****#TMP.3KvMuCpXhuMbeZsbpaE****m738WfEw73rzeohJUeXxhsKza1khCxdKSJQAU 5CFac*****qDCA#STS.NZFkZ3TbJNmAjS2TKLdUHHdiW#**.*.*.***" at org.apache.hadoop.mapreduce.lib.db.DBInputFormat.createConnection(DBInputFormat.java:205) at com.aliyun.odps.jdbc.impl.JdbcDBInputFormat.superCreateConnection(JdbcDBInputFormat.java:69) at com.aliyun.odps.jdbc.impl.JdbcDBInputFormat.createConnection(JdbcDBInputFormat.java:56) at org.apache.hadoop.mapreduce.lib.db.DBInputFormat.setConf(DBInputFormat.java:164) -
Causa
O modo de autorização por função vinculada ao service falhou.
-
Solução
Adicione o parâmetro
set odps.external.holo.enable.slr = force;antes da instrução SQL para forçar a ativação do modo de autorização por função vinculada ao service.
Erro Holo-side PPD disabled --> The Holo snapshot PPD mode is enabled, but FAILED to push down the filter into Holo no modo de leitura direta
-
Mensagem de erro
Holo-side PPD disabled --> The Holo snapshot PPD mode is enabled, but FAILED to push down the filter into Holo, errorMsg[storage/table/src/holo/snapshot.cpp(319): StorageException: Create/Get snapshot failed for table: test_multi_type_ppd partition: Query:select holo_create_table_snapshot('public.test_multi_type_ppd', 259200, filter=>$$c_id = 3$$) with error ERROR: internal error: Failed to build fragment dag desc: node type 65 is not supported -
Solução
Verifique se a tabela interna do Hologres atende aos requisitos descritos em Usage notes.
Fallback exibido no modo de leitura direta
Na aba Summary do Logview, se informações de Fallback aparecerem na seção external holo tables, isso indica que o modo de leitura direta não foi utilizado e o sistema retornou ao modo JDBC. Os erros e causas mais comuns estão listados abaixo:
Detalhes do erro | Causa raiz | Resolução |
Column name <col> Odps type <X> Holo type <Y>, manifestado especificamente como:
| Erro no mapeamento de tipo de coluna | Os tipos de coluna dos campos da tabela externa do Hologres não correspondem aos da tabela source. Modifique o tipo de dados da tabela externa de acordo com a data type mapping para ativar o modo de leitura direta. |
Odps table schema invalid | Erro de generalização: consulte os logs de erro no Logview para obter detalhes. |
|
Holo connection error | Exceção na conexão com a instância do Hologres | Informações de permissão incorretas ou status anormal da instância do Hologres. Verifique se o usuário atual tem permissão para acessar o banco de dados correspondente do Hologres, ou confira se a instância do Hologres está em estado operacional. |
Select hg_version error/Hologres version check error/Fetch hg_version data error | Versão incorreta da instância do Hologres | Atualize a instância do Hologres para a versão V1.3.34 ou posterior. Para detalhes sobre como atualizar a versão da instância, consulte Upgrade an instance. |
Referências
Para mais informações sobre problemas comuns com tabelas externas do Hologres, consulte Lakehouse and Foreign Table FAQ.