O Hologres integra-se perfeitamente ao Realtime Compute for Apache Flink executado no Blink em modo exclusivo. Use um conector para gravar fluxos de dados em uma tabela de destino do Hologres e consultar esses dados imediatamente. Este tópico descreve como gravar dados em uma tabela de destino do Hologres a partir de um job executado no Blink em modo exclusivo.
Limitações
Versões diferentes do Blink em modo exclusivo usam sintaxes de desenvolvimento distintas. Antes de começar, identifique a versão do Blink em modo exclusivo e consulte os exemplos correspondentes.
Garanta que sua implantação do Realtime Compute for Apache Flink e sua instância do Hologres estejam na mesma região para evitar falhas de conexão.
-
Versões do Blink em modo exclusivo anteriores à 3,6 não possuem conector nativo para o Hologres. Para gravar dados no Hologres em tempo real, referencie um arquivo JAR. Para obter assistência, consulte Common errors during upgrade preparation ou entre em contato conosco participando do grupo do DingTalk do Hologres. Para mais informações, consulte How can I get more online support?.
NotaRecomendamos atualizar o Blink em modo exclusivo para a versão 3,6 ou posterior para executar seus jobs.
-
O Blink em modo exclusivo 3,7 suporta a criação automática de tabelas particionadas do Hologres, mas configure
createparttable='true'no job. As considerações para o uso de tabelas particionadas são:Atualmente, o Hologres suporta apenas particionamento por lista.
Ao criar uma tabela particionada, especifique explicitamente a coluna da chave de partição. No momento, as colunas de chave de partição suportam apenas os tipos de dados text e int4, e seus valores não podem conter hífen (-), por exemplo,
2020-09-12.Se houver uma chave primária definida para a tabela particionada, a coluna da chave de partição deve fazer parte dessa chave primária.
Na criação de uma tabela de partição filha, o valor da coluna da chave de partição deve ser fixo.
O valor da coluna da chave de partição para dados gravados em uma tabela de partição filha deve corresponder exatamente ao valor definido durante a criação da tabela filha. Caso contrário, ocorrerá um erro.
O recurso de partição DEFAULT não é suportado atualmente.
Se a tabela de destino no Hologres possuir uma chave primária, a semântica padrão de escrita em tempo real não atualiza registros com base nessa chave. Se você importar posteriormente dados com uma chave primária duplicada, os novos dados serão descartados.
O Hologres grava dados de forma assíncrona. Adicione a configuração
blink.checkpoint.fail_on_checkpoint_error=trueao seu job para garantir o acionamento de um failover caso o job encontre uma exceção. Esse parâmetro não é obrigatório para o Blink 3.7.6 ou posterior.
Sintaxe DDL
A instrução DDL a seguir cria uma tabela de destino do Hologres.
create table Hologres_sink(
name varchar,
age BIGINT,
birthday BIGINT
) with (
type='hologres',
dbname='<yourDbname>', -- The name of the Hologres database.
tablename='<yourTablename>', -- The name of the Hologres table that receives the data.
username='<yourUsername>', -- The AccessKey ID of your Alibaba Cloud account.
password='<yourPassword>', -- The AccessKey secret of your Alibaba Cloud account.
endpoint='<yourEndpoint>'); -- The VPC endpoint of your Hologres instance.
Parâmetros WITH
|
Parâmetro |
Descrição |
Exemplo |
|
type |
Tipo da tabela de destino. Defina como |
hologres |
|
endpoint |
Endpoint da VPC da instância do Hologres. Faça login no console do Hologres e localize o endpoint na seção Network Information da página de detalhes da instância. O endpoint deve incluir um número de porta e seguir o formato ip:porta. |
demo-cn-hangzhou-vpc.hologres.aliyuncs.com:80 |
|
username |
AccessKey ID Obtenha seu AccessKey ID na página AccessKey Management. |
xxxxm3FMWaxxxx |
|
password |
AccessKey secret Obtenha seu AccessKey secret na página AccessKey Management. |
xxxxm355fffaxxxx |
|
dbname |
Nome do banco de dados do Hologres. |
Holodb |
|
tablename |
Nome da tabela no banco de dados do Hologres. |
blink_test |
|
arraydelimiter |
O destino do Hologres usa este delimitador para dividir um campo STRING em um array antes de importá-lo para o Hologres. O valor padrão é \u0002. |
\u0002 |
|
mutatetype |
Modo de escrita de dados. Para mais informações, consulte Hologres sink table. O valor padrão é insertorignore. |
insertorignore |
|
ignoredelete |
Define se as mensagens de retração devem ser ignoradas.
Nota
Este parâmetro tem efeito apenas em jobs de streaming. O valor padrão é false. Operações |
false |
|
partitionrouter |
Define se os dados devem ser gravados em uma tabela particionada.
O valor padrão é false. |
false |
|
createparttable |
Ao gravar em uma tabela particionada, define se as tabelas de partição filhas devem ser criadas automaticamente com base nos valores de partição. Este recurso é suportado no Blink em modo exclusivo versão 3,7 e posterior. O valor padrão é false. Importante
Use este recurso com cautela. Certifique-se de que os valores de partição não contenham dados incorretos, pois isso pode levar à criação de tabelas de partição equivocadas. |
false |
Os parâmetros arraydelimiter, mutatetype, ignoredelete, partitionrouter e createparttable não estão incluídos na instrução DDL de exemplo. Caso precise usar esses parâmetros em sua aplicação, adicione-os conforme descrito nesta tabela.
Gravar em uma tabela de destino padrão do Hologres
-
Crie uma tabela no Hologres.
Crie uma tabela no Hologres para receber os dados. Abaixo está um exemplo de instrução SQL:
create table blink_test (a int, b text, c text, d float8, e bigint); -
Crie um job do Realtime Compute for Apache Flink.
Faça login no console do Realtime Compute for Apache Flink.
-
Crie um job.
-
O Blink em modo exclusivo versão 3,6 e posterior inclui suporte nativo para a fonte de dados do Hologres. Use essa fonte de dados diretamente. Veja abaixo um exemplo de instrução SQL:
create table randomSource (a int, b VARCHAR, c VARCHAR, d DOUBLE, e BIGINT) with (type = 'random'); create table test ( a int, b VARCHAR, c VARCHAR, PRIMARY KEY (a) ) with ( type = 'hologres', `endpoint` = '$ip:$port', -- The VPC endpoint and port number of your Hologres instance. `username` = 'The AccessKey ID of your Alibaba Cloud account', `password` = 'The AccessKey secret of your Alibaba Cloud account', `dbname` = 'The name of the Hologres database', `tablename` = 'blink_test'-- The name of the Hologres table that receives the data. ); insert into test select a,b,c from randomSource;
-
-
Publique o job.
Após criar o job, clique em Syntax Check. Um status Successful indica que a sintaxe está correta.
Clique em Save para salvar o job.
Clique em Publish para implantar o job no ambiente de produção. Configure as definições de implantação conforme suas necessidades de negócio. Clique em Publish New Version para iniciar o processo de implantação. Na etapa Initial Resources, escolha um método de alocação de recursos: Auto-tuning based on last run, System allocation ou Manual resource configuration. Após fazer sua seleção, clique em Next. Você também pode clicar em Skip Data Check para ir diretamente à etapa de configuração de recursos.
-
Inicie o job.
Depois de publicar o job no ambiente de produção, inicie-o manualmente.
Na barra de navegação superior da página Development Platform, clique em Administration à direita. Na página Administration, selecione o job desejado e clique em Start uicontrol替换 修改时间:2026-02-03 01:28:40 原文:启动 修改后:conref="mcms_dita_hologres-console.dita#hologres-console/start" no canto superior direito.
-
Consulte dados no Hologres em tempo real.
Consulte a tabela de destino no Hologres para visualizar os dados gravados em tempo real. Veja abaixo um exemplo de consulta:
select * from blink_test;
Mesclar e atualizar tabelas largas
Esta seção descreve um caso de uso comum: gravar dados de múltiplos fluxos em uma única tabela larga do Hologres.
Suponha que você tenha uma tabela larga do Hologres chamada WIDE_TABLE com as colunas A, B, C, D e E, onde a coluna A é a chave primária. No Flink, um fluxo contém dados para as colunas A, B e C, enquanto outro fluxo contém dados para as colunas A, D e E.
Use o Flink SQL para declarar duas tabelas de destino do Hologres. Declare as colunas A, B e C para uma tabela e as colunas A, D e E para a outra. Mapeie ambas as tabelas para a tabela WIDE_TABLE no Hologres.
Defina o parâmetro mutatetype como insertorupdate para ambas as tabelas de destino.
Configure o parâmetro ignoredelete como true para ambas as tabelas de destino. Isso impede que mensagens de retração gerem solicitações
DELETE.Insira os dados de cada fluxo em sua tabela de destino correspondente.
Este cenário apresenta as seguintes limitações:
A tabela larga deve possuir uma chave primária.
Cada fluxo deve incluir todas as colunas da chave primária.
Mesclar dados em uma tabela larga orientada a colunas com alto RPS pode resultar em alto uso de CPU. Recomendamos desativar o Dictionary encoding para as colunas da tabela.
Gravar em uma tabela de destino particionada do Hologres
O Hologres permite chamar a API HoloHub para gravar dados diretamente em uma tabela particionada pai. Os dados são então roteados automaticamente para as tabelas de partição filhas corretas. Para mais informações, consulte HoloHub API.
As seguintes limitações se aplicam:
Atualmente, o Hologres suporta apenas particionamento por lista.
Ao criar uma tabela particionada, especifique explicitamente a coluna da chave de partição. O tipo de dados da coluna da chave de partição pode ser apenas text ou int4.
Se houver uma chave primária definida, a coluna da chave de partição deve fazer parte dessa chave primária.
Na criação de uma tabela de partição filha, o valor da coluna da chave de partição deve ser fixo.
O valor da coluna da chave de partição para dados gravados em uma tabela de partição filha deve corresponder exatamente ao valor definido durante a criação da tabela filha. Caso contrário, ocorrerá um erro.
O Hologres não suporta partições padrão atualmente.
-
Crie uma tabela particionada no Hologres.
Crie uma tabela particionada no Hologres para receber dados e crie suas tabelas de partição filhas correspondentes. Veja abaixo um exemplo de instrução SQL:
-- Create the parent table test_message and its child partition tables. drop table if exists test_message; begin; create table test_message ( "bizdate" text NOT NULL, "tag" text NOT NULL, "id" int4 NOT NULL, "title" text NOT NULL, "body" text, PRIMARY KEY (bizdate,tag,id) ) PARTITION BY LIST (bizdate); commit;NotaAo executar o comando, substitua o parâmetro
${bizdate}pelo valor real.Apenas a versão 3,7 ou posterior do Blink em modo exclusivo suporta a criação automática de partições. Se estiver usando uma versão anterior, crie as tabelas de partição filhas no Hologres antecipadamente. Caso contrário, a importação de dados falhará.
-
Crie um job no Blink em modo exclusivo.
Veja abaixo um exemplo de instrução para criar um job no Blink em modo exclusivo.
NotaO exemplo a seguir aplica-se ao Blink em modo exclusivo 3,7 e posterior. Se estiver usando uma versão do Blink em modo exclusivo anterior à 3,7, atualize para a versão 3,7 ou posterior, ou remova a configuração
createparttable.create table test_message_src( tag VARCHAR, id INTEGER, title VARCHAR, body VARCHAR ) with ( type = 'random', `interval` = '10', `count` = '100' ); create table test_message_sink ( bizdate VARCHAR, tag VARCHAR, id INTEGER, title VARCHAR, body VARCHAR ) with ( type = 'hologres', `endpoint` = '$ip:$port', -- The VPC endpoint of your Hologres instance. `username` ='<AccessID>', -- The AccessKey ID of your Alibaba Cloud account. `password` = '<AccessKey>', -- The AccessKey secret of your Alibaba Cloud account. `dbname` = '<DBname>', -- The name of the Hologres database. `tablename` = '<Tablename>', -- The name of the table in your Hologres database. `partitionrouter` = 'true', -- Write data to a partitioned table in Hologres. `createparttable` = 'true' -- Automatically create child partition tables in Hologres. ); insert into test_message_sink select "20200327",* from test_message_src; insert into test_message_sink select "20200328",* from test_message_src; -
Publique e inicie o job.
Para mais informações, consulte as etapas Publish the job e Start the job na seção Write data to a standard Hologres sink table.
-
Consulte dados no Hologres em tempo real.
Consulte a tabela de destino no Hologres para visualizar os dados gravados em tempo real. Veja abaixo exemplos de consultas:
select * from test_message; select * from test_message where bizdate = '20200327';
Mapeamentos de tipos de dados
Consulte Data type summary para ver os mapeamentos de tipos de dados entre o Blink em modo exclusivo e o Hologres.