Iceberg da série inicial à proficiência dez: flink sql insere dados na tabela Iceberg
1. INSERIR EM
CREATE TABLE `stu` (id int,name string, age int)
PARTITIONED BY (age)
insert into stu values(3,'杀sheng',16),(4,'鸣人',19)
2. INSERIR SUBSTITUIR
Suporta apenas o modo Batch do Flink
SET execution.runtime-mode = batch;
INSERT OVERWRITE sample VALUES (1,'a');
INSERT OVERWRITE `hive_catalog`.`default`.`sample` PARTITION(data='a') SELECT 6;
3. UPSERT
Iceberg oferece suporte a UPSERT com base na chave primária ao gravar dados em tabelas v2. Existem duas maneiras de habilitar upsert.
Especifique ao criar a tabela
CREATE TABLE `hive_catalog`.`test`.`sample5`(
`id` INT UNIQUE COMMENT 'unique id',
`data` STRING NOT NULL,
PRIMARY KEY(`id`) NOT ENFORCED
) with (
'format-version'='2',
'write.upsert.enabled'='true'
);
No modo UPSERT, se a tabela for particionada, o campo de partição deverá ser a chave primária.
insert into sample5 values(1,'a');
insert into sample5 values(2,'b');
SET sql-client.execution.result-mode=tableau;
select * from sample5;
insert into sample5 values(2,'c');
4. Modo de consulta em lote
Modo de lote:
SET execution.runtime-mode = batch;
select * from sample;
5. Consultar o modo Streaming
Modo de transmissão:
SET execution.runtime-mode = streaming;
SET table.dynamic-table-options.enabled=true;
SET sql-client.execution.result-mode=tableau;
Leia todos os registros do instantâneo atual e, em seguida, leia os dados incrementais desse instantâneo
SELECT * FROM sample /*+ OPTIONS('streaming'='true','monitor-interval'='1s')*/;
Leia os dados incrementais após o ID do instantâneo especificado (não incluído)
SELECT * FROM sample /*+ OPTIONS('streaming'='true','monitor-interval'='1s','start-snapshot-id'='384023852058202')*/;
6. Leia o fluxo Kafka e insira-o na tabela iceberg
Baixar flink-conector-kafka:
https://mvnrepository.com/artifact/org.apache.flink/flink-connector-kafka/1.17.1
Crie a tabela do iceberg:
CREATE TABLE `hive_catalog`.`test`.`sample5`(
`id` INT UNIQUE COMMENT 'unique id',
`data` STRING NOT NULL,
PRIMARY KEY(`id`) NOT ENFORCED
)
Crie uma tabela correspondente ao tópico kafka:
create table default_catalog.default_database.kafka(
id int,
data string
) with(
'connector' = 'kafka',
'topic' = 'testKafkaTopic',
'properties.zookeeper.connect'='hadoop1:2101',
'properties.bootstrap.servers' = 'hadoop1:9092',
'format' = 'json',
'properties.group.id'='iceberg',
'scan.startup.mode'='earliest-offset'
);
Leitura em streaming:
SET sql-client.execution.result-mode=tableau;
SET execution.runtime-mode = streaming;
inserir dados
insert into hive_catalog.test1.sample5 select * from default_catalog.default_database.kafka;
Consultar dados
SELECT * FROM sample5 /*+ OPTIONS('streaming'='true','monitor-interval'='1s')*/;
Quando o tópico tem os dados mais recentes, ele pode consultar continuamente os dados mais recentes.