Este tópico descreve como criar uma tabela externa do Lindorm no MaxCompute e mapear uma fonte de dados do Lindorm.
Introdução
O Lindorm é um banco de dados multimodelo nativo da cloud projetado para cenários como Internet das Coisas (IoT), services de internet e Internet dos Veículos. Ele oferece acesso unificado e processamento integrado para diversos tipos de dados, incluindo tabelas largas, séries temporais, texto, objetos, streams e dados espaciais. O Lindorm é compatível com várias interfaces padrão, como SQL, HBase/Cassandra/S3, TSDB, HDFS, Solr e Kafka, sendo um dos bancos de dados essenciais que suportam os principais services da alibaba.
Se houver conexão de rede entre o MaxCompute e o Lindorm, crie uma tabela externa mapeada para uma tabela do Lindorm. Isso permite:
Sincronizar dados de uma tabela do Lindorm para o MaxCompute para processamento ETL subsequente.
Executar consultas federadas juntando a tabela com outras tabelas do Lindorm.
Gravar dados do MaxCompute em uma tabela do Lindorm.
Limitações
Disponibilidade por região: Este recurso está disponível apenas nas seguintes regiões: China (Beijing), China (Shanghai), China (Zhangjiakou), China (Hangzhou), China (Shenzhen), China (Hong Kong), China (Shanghai) Finance Cloud Zone F, Japan (Tokyo), Singapore, Malaysia (Kuala Lumpur), Indonesia (Jakarta), Germany (Frankfurt), US (Silicon Valley) e US (Virginia).
As tabelas externas do Lindorm não suportam a propriedade de cluster.
Somente o HBase-compatible mode of the wide table engine tem suporte.
Considerações
Ao ler dados de uma tabela de source do Lindorm, o sistema trata as discrepâncias na contagem de colunas da seguinte forma: se a tabela de source tiver menos colunas do que as definidas na DDL da tabela externa, as colunas ausentes receberão o valor NULL. Caso a tabela de source possua mais colunas, os dados excedentes serão ignorados.
Criar uma tabela externa do Lindorm
Sintaxe
Ao criar uma tabela externa do Lindorm, especifique HBaseStorageHandler na instrução CREATE EXTERNAL TABLE e configure a instância do Lindorm.
Os nomes de tabelas e colunas não diferenciam maiúsculas de minúsculas. Não há suporte para conversão forçada de caixa. A sintaxe é a seguinte:
-- Enable Hive-compatible mode.
SET odps.sql.hive.compatible = true;
-- Configure the odps.sql.hbase.version parameter to switch the HBase version to lindorm.
SET odps.sql.hbase.version=lindorm;
-- Create a Lindorm external table.
CREATE EXTERNAL TABLE if NOT EXISTS <mc_lindorm_external>
(
<col_name1> <data_type>,
<col_name2> <data_type>,
......
)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' -- The handler for the Lindorm data source.
WITH SERDEPROPERTIES(
'hbase.columns.mapping'='<:key,col-family:col-name1,col-family:col-name2,...>')
TBLPROPERTIES(
-- The hbase.table.name and hbase.zookeeper.quorum parameters are required.
'hbase.table.name'='',
'hbase.zookeeper.quorum'='',
-- Configure the hbase.client.username and hbase.client.password parameters.
'hbase.client.username'='****','hbase.client.password'='****',
-- The hbase.zookeeper.property.clientPort, mcfed.zookeeper.session.timeout, and hbase.client.retries.number parameters are optional.
-- The default value of hbase.zookeeper.property.clientPort is 30020.
['hbase.zookeeper.property.clientPort'='{30020}',]
['mcfed.zookeeper.session.timeout'='{{VALUE}}',]
['hbase.client.retries.number'='{{VALUE}}',]
'networklink'='{{NETWORKLINK_NAME}}'
);
Parâmetros
mc_lindorm_external: Obrigatório. Nome da tabela externa do Lindorm a ser criada.
col_name: Obrigatório. Nome de uma coluna na tabela externa do Lindorm.
data_type: Obrigatório. Tipo de dados da coluna.
-
WITH SERDEPROPERTIES:
-
'hbase.columns.mapping'='<:key,col-family:col-name1,col-family:col-name2,...>': Obrigatório. Mapeamento de colunas entre a tabela externa do Lindorm e a tabela de source do Lindorm. Para mais informações, consulte HBaseIntegration-ColumnMapping.
Especifique primeiro a chave de linha (
:key1[,:key2,:keyn]).O formato da coluna é
col-family:col-name1,col-family:col-name2. Um único job pode conter apenas uma família de colunas.
-
-
TBLPROPERTIES:
'hbase.table.name'='<namespace:lindorm_table_name>': Obrigatório. Namespace e nome da tabela de source do Lindorm. Se nenhum namespace for especificado, o sistema usará o namespace
default. Crie a tabela previamente no console do Lindorm.'hbase.zookeeper.quorum'='<VPC ip1|host1:port,VPC ip2|host2:port...>': Obrigatório. String de conexão do ZooKeeper para o mecanismo de tabela larga da instância do Lindorm. Encontre esse valor como URL de acesso da API Java no console do Lindorm.
-
hbase.client.username: Obrigatório. Para obter o nome de usuário, siga estas etapas:
Faça login no console do Lindorm e selecione uma região no canto superior esquerdo.
Na página Instances, clique em nome da instância desejada para abrir sua página de detalhes.
No painel de navegação à esquerda, escolha Database Connections.
Na aba Wide Table Engine, localize o Default Username.
-
hbase.client.password: Obrigatório. Para obter a senha, siga estas etapas:
Faça login no console do Lindorm e selecione uma região no canto superior esquerdo.
Na página Instances, clique em nome da instância desejada para abrir sua página de detalhes.
No painel de navegação à esquerda, escolha Database Connections.
Na aba Wide Table Engine, localize a Default Initial Password.
'hbase.zookeeper.property.clientPort'='{2181|30020}': Opcional. Porta do ZooKeeper para o Lindorm. A porta padrão é 30020.
'mcfed.zookeeper.session.timeout'='<value>': Opcional. Tempo limite da sessão do ZooKeeper, em milissegundos. O valor recomendado é 30000.
'hbase.client.retries.number'='<value>': Opcional. Número máximo de tentativas de reconexão.
'networklink'='<networklink_name>': Obrigatório. Nome do link de rede do MaxCompute usado para acessar a VPC onde reside a instância do Lindorm.
NotaParâmetros que começam com mcfed.zookeeper ou hbase referem-se a configurações relacionadas ao ZooKeeper.
Exemplo
Você já created a MaxCompute project e installed and configured the MaxCompute client.
Você ativou o service Lindorm e created a Lindorm instance.
Você baixou e configurou o Lindorm Shell. Para mais informações, consulte Access the wide-table engine by using Lindorm Shell.
-
Conexão de rede
Estabeleça uma conexão de rede entre o MaxCompute e o Lindorm por meio de uma VPC. Para mais informações sobre soluções de conexão VPC, consulte Network connection process.
Essa conexão permite apenas que o MaxCompute acesse a VPC especificada. Para acessar outras VPCs ou recursos em diferentes regiões, conecte as VPCs seguindo as instruções em VPC access (direct connection over a leased line).
-
Use o Lindorm Shell para criar uma tabela do Lindorm e inserir dados.
-
Crie a tabela
lindorm_test.CREATE 'lindorm_test','f'; -
Insira dados na tabela
lindorm_test.put 'lindorm_test', '1122', 'f:col1', 'hello'; put 'lindorm_test', '1122', 'f:col2', 'hbase'; -
Consulte dados da tabela
lindorm_test.scan 'lindorm_test';Resultado retornado:
ROW COLUMN+CELL 1122 column=f:col1, timestamp=1634201741745, value=hello 1122 column=f:col2, timestamp=1634201835934, value=hbase 1 row(s) Took 0.0766 seconds
-
-
Crie uma tabela externa do MaxCompute e mapeie-a para a fonte de dados do Lindorm.
-
Execute o comando abaixo no cliente MaxCompute para criar uma tabela externa do Lindorm chamada
lindorm_test_ext.SET odps.sql.hive.compatible = true; SET odps.sql.hbase.version=lindorm; CREATE EXTERNAL TABLE lindorm_test_ext ( row_key INT, col1 STRING, col2 STRING ) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ( 'hbase.columns.mapping'=':key,f:col1,f:col2') TBLPROPERTIES ( 'hbase.table.name'='lindorm_test', 'hbase.zookeeper.quorum'='ld-2z****-proxy-lindorm.lindorm.rds.aliyuncs.com:30020', 'hbase.client.username'='<user_name>', 'hbase.client.password'='***', 'networklink'='<your network link name>'); -
Consulte dados da tabela externa
lindorm_test_ext.SET odps.sql.hive.compatible = true; SET odps.sql.hbase.version=lindorm; SELECT * FROM lindorm_test_ext; -- The following result is returned: +------------+------------+----------+ | key | col1 | col2 | +------------+------------+----------+ | 1122 | hello | hbase | +------------+------------+----------+ -
Insira dados na tabela externa
lindorm_test_ext.SET odps.sql.hive.compatible = true; SET odps.sql.hbase.version = lindorm; INSERT OVERWRITE TABLE lindorm_test_ext SELECT '1123', 'lindorm', 'mftestinsert'; -
Consulte novamente os dados da tabela externa
lindorm_test_ext.SET odps.sql.hive.compatible = true; SET odps.sql.hbase.version=lindorm; SELECT * FROM lindorm_test_ext; -- The following result is returned: +------------+------------+-------------+ | key | col1 | col2 | +------------+------------+-------------+ | 1122 | hello | hbase | | 1123 | lindorm | mftestinsert| +------------+------------+-------------+ -
Utilize a instrução
scanpara consultar dados da tabela do Lindormlindorm_test.scan 'lindorm_test';Resultado retornado:
ROW COLUMN+CELL 1122 column=f:col1, timestamp=1634201741745, value=hello 1122 column=f:col2, timestamp=1634201835934, value=hbase 1123 column=f:col1, timestamp=1634552508947, value=lindorm 1123 column=f:col2, timestamp=1634552508947, value=mftestinsert 2 row(s) Took 0.0683 seconds
-