As tabelas externas do MaxCompute permitem executar análises SQL diretamente nos dados do Tablestore, sem necessidade de migração. Este guia orienta você na criação de uma tabela externa no MaxCompute mapeada para uma tabela de dados do Tablestore na mesma conta Alibaba Cloud.
Contexto
O MaxCompute é um serviço de computação de big data totalmente gerenciado que oferece data warehousing e análise em escala de petabytes. Com uma única instrução DDL, crie uma tabela externa no MaxCompute para se conectar a uma fonte de dados externa e permitir a ingestão e a exportação de dados. Diferentemente das tabelas nativas do MaxCompute, que armazenam apenas dados estruturados, as tabelas externas suportam dados estruturados e não estruturados.
O Tablestore e o MaxCompute utilizam sistemas de tipos diferentes. A tabela a seguir apresenta o mapeamento de tipos de dados entre os dois serviços.
|
Tablestore |
MaxCompute |
|
STRING |
STRING |
|
INTEGER |
BIGINT |
|
DOUBLE |
DOUBLE |
|
BOOLEAN |
BOOLEAN |
|
BINARY |
BINARY |
Pré-requisitos
Antes de começar, verifique se você possui:
Um workspace do MaxCompute. Para mais informações, consulte Criar um workspace.
Um par de AccessKey para autenticação.
Autorização do MaxCompute para acessar o Tablestore no console RAM. Para mais informações, consulte Autorização entre contas.
-
Uma instância e uma tabela de dados do Tablestore criadas no console do Tablestore. Para mais informações, consulte criar uma instância e criar uma tabela de dados.
Este guia utiliza os seguintes recursos de exemplo:
Nome da instância: cap1
Nome da tabela de dados: vehicle_track
Chaves primárias: vid (INTEGER), gt (INTEGER)
-
Endpoint:
https://cap1.cn-hangzhou.ots-internal.aliyuncs.comNotaUse o endpoint privado da instância do Tablestore ao acessá-la a partir do MaxCompute.
-
Controle de acesso à rede configurado para a instância. Por padrão, o Tablestore permite acesso de qualquer rede. Mantenha a configuração padrão conforme descrito abaixo:
A configuração é a seguinte: O Access Type padrão é Custom. Em Allowed Network Types, as opções VPC, classic network e public network estão selecionadas. Em Allowed Source Types, a opção Trusted Gateway (Console) está selecionada. Clique em Set para salvar as configurações.
Etapa 1: Instalar e configurar o cliente MaxCompute
-
Baixe e descompacte o cliente MaxCompute.
NotaVerifique se o Java Runtime Environment (JRE) 1.7 ou superior está instalado em sua máquina.
-
Edite o arquivo
conf/odps_config.inicom a seguinte configuração:# The AccessKey pair of your Alibaba Cloud account, which consists of an AccessKey ID and an AccessKey secret. To view the AccessKey pair, log on to the Alibaba Cloud Management Console, hover over your profile picture in the top-right corner, and click AccessKey Management. access_id=******************* access_key=********************* # The project you want to access. project_name=my_project # The endpoint for the MaxCompute service. end_point=https://service.odps.aliyun.com/api # The endpoint for the MaxCompute Tunnel service. tunnel_endpoint=https://dt.odps.aliyun.com # The Logview URL that the client returns after a job is run. Open this URL to view detailed job execution information. log_view_host=http://logview.odps.aliyun.com # Specifies whether to enable access over HTTPS. https_check=trueNotaNo arquivo
odps_config.ini, o sinal de cerquilha (#) indica um comentário, enquanto no cliente MaxCompute, dois hífens (--) indicam um comentário. -
Execute
bin/odpscmd.bate insirashow tables;.Se as tabelas do projeto atual do MaxCompute forem exibidas, a configuração estará correta.
odps@ MCOTStest>show tables; ALIYUN$document@aliyun-test.com:bank_data ALIYUN$document@aliyun-test.com:result_table OK
Etapa 2: Criar uma tabela externa
Crie uma tabela externa do MaxCompute chamada ots_vehicle_track mapeada para a tabela de dados vehicle_track do Tablestore.
A tabela de dados de destino possui as seguintes propriedades:
Nome da instância: cap1
Nome da tabela de dados: vehicle_track
Chaves primárias: vid (INTEGER), gt (INTEGER)
Endpoint:
https://cap1.cn-hangzhou.ots-internal.aliyuncs.com
CREATE EXTERNAL TABLE IF NOT EXISTS ots_vehicle_track
(
vid bigint,
gt bigint,
longitude double,
latitude double,
distance double ,
speed double,
oil_consumption double
)
STORED BY 'com.aliyun.odps.TableStoreStorageHandler' -- (1)
WITH SERDEPROPERTIES ( -- (2)
'tablestore.columns.mapping'=':vid, :gt, longitude, latitude, distance, speed, oil_consumption', -- (3)
'tablestore.table.name'='vehicle_track' -- (4)
)
LOCATION 'tablestore://cap1.cn-hangzhou.ots-internal.aliyuncs.com'; -- (5)
A tabela a seguir descreve os parâmetros da instrução DDL.
|
Número |
Parâmetro |
Descrição |
|
(1) |
com.aliyun.odps.TableStoreStorageHandler |
Handler de armazenamento integrado do MaxCompute para o Tablestore. Define como o MaxCompute lê e grava dados no Tablestore. |
|
(2) |
SERDEPROPERITES |
Interface de propriedades de serialização e desserialização. Duas propriedades são obrigatórias ao usar o TableStoreStorageHandler: |
|
(3) |
tablestore.columns.mapping |
Obrigatório. Especifica quais colunas do Tablestore o MaxCompute acessará, incluindo colunas de chave primária e colunas de atributo. Um nome de coluna prefixado com dois pontos ( |
|
(4) |
tablestore.table.name |
Nome da tabela do Tablestore a ser acessada. Se a tabela especificada não existir, o MaxCompute retornará um erro. O MaxCompute não cria tabelas do Tablestore automaticamente. |
|
(5) |
LOCATION |
Informações da instância do Tablestore, incluindo o nome da instância e o endpoint. |
Etapa 3: Consultar dados do Tablestore por meio da tabela externa
Alta concorrência aumenta a carga na instância do Tablestore e pode causar maior latência ou falhas em requisições de workloads online. Para controlar o paralelismo, execute set odps.sql.mapper.split.size=256;. Um valor maior reduz a concorrência; um valor menor a aumenta. Para mais informações, consulte SQL Tuning.
Após criar a tabela externa, os dados do Tablestore ficam disponíveis no ecossistema do MaxCompute. Use o SQL do MaxCompute para consultar esses dados.
-- Calculate the average speed and fuel consumption of vehicles with a VID less than 4 before timestamp 1469171387.
select vid,count(*),avg(speed),avg(oil_consumption) from ots_vehicle_track where vid <4 and gt<1469171387 group by vid;
Resultado de exemplo:
odps@ analysis_vehicle>select vid,count(*), avg(speed),avg(oil_consumption) from ots_vehicle_track where vid <4 and gt<1469171387 group by vid;
ID = 20170306160538185gsvlupk2
Log view:
http://logview.odps.aliyun.com/logview/?h=http://service.odps.aliyun.com/api&p=analysis_vehicle&i=20170306160538185gsvlupk2&token=ajhxdXZNWWVPcTNrWkFOS0xpSGtoM2tFWGEwPSxPRFBT
09CTzoxNjA0MzM3MzgzMTc0NjE5LDE0ODk0MjExMzgseyJTdGF0ZW1lbnQiOlt7IkFjdGlvbiI6WyJvZHBzOlJlYWQiXSwiRWZmZWN0IjoiQWxsb3ciLCJSZXNvdXJjZSI6WyJhY3M6b2RwczoqOnByb2plY3RzL2NJSZXNvdXJjZSI6WyJhY3M6b2RwczoqOnByb2plY3RzL2
aGljbGUvaW5zdGFuY2VzLzIwMTcwMzA2MTYwNTM4MTg1Z3N2bHVwazIiXX1dLCJWZXJzaW9uIjoiMSJ9
aGljbGUvaW5zdGFuY2VzLzIwMTcwMzA2MTYwNTM4MTg1Z3N2bHVwazIiXX1dLCJWZXJzaW9uIjoiMSJ9
Job Queueing.
STAGES STATUS TOTAL COMPLETED RUNNING PENDING BACKUP
M1_job_0 .............. TERMINATED 1 1 0 0 0
R2_1_job_0 ............. TERMINATED 1 1 0 0 0
STAGES: 02/02 [==========================>>] 100% ELAPSED TIME: 51.18 s
Summary:
+------------+------------+----------------------+----------------------+
| vid | _c1 | _c2 | _c3 |
+------------+------------+----------------------+----------------------+
| 0 | 47 | 0.11622589796672624 | 6.5155061805308145 |
| 1 | 47 | 0.11200649789552555 | 6.5673983001829885 |
| 2 | 47 | 0.098971763146085 | 6.738738527883797 |
| 3 | 47 | 0.11503916531605494 | 6.6038902692751895 |
+------------+------------+----------------------+----------------------+