本文为您介绍如何使用SQL语句导入MaxCompute的数据至Hologres。
背景信息
针对MaxCompute的业务数据大于100 GB,查询复杂度高且要求查询响应达到秒级的场景,Hologres支持直接导入数据并查询。
导入MaxCompute的非分区表数据至Hologres并查询
- 准备MaxCompute的非分区表数据。
在MaxCompute中创建一张非分区源数据表,或直接选用中已创建的非分区表。示例选取数据地图已创建的非分区表odps_test1,SQL语句如下。
CREATE TABLE odps_test1( id int, name STRING , class STRING ); INSERT INTO odps_test1 VALUES (1,'Tom','class3'), (2,'Neal','class4'), (3,'Tony','class4'), (4,'David','class5');
- 创建外部表。
在Hologres中创建一张用于映射MaxCompute源数据表的外部表。示例SQL语句如下。
CREATE FOREIGN TABLE holo_test1 ( id int8, name text, class text ) SERVER odps_server OPTIONS (project_name '<odpsprojectname>', table_name 'odps_test1');
参数 描述 Server 您可以直接调用Hologres底层已创建的名为odps_server的外部表服务器。详细原理请参见Postgres FDW。 Project_Name MaxCompute表所在的项目名称。 Table_Name 需要查询的MaxCompute表名称。 外部表字段的数据类型与MaxCompute表字段的数据类型保持一致,数据类型的映射关系请参见MaxCompute与Hologres的数据类型映射。 - 创建存储表。
在Hologres中创建一张用于接收MaxCompute源表数据的存储表。存储表的字段类型与MaxCompute表的字段类型保持一致。示例SQL语句如下。
CREATE TABLE holo_test2 ( id int8, name text, class text );
- 导入数据至Hologres。
使用
INSERT
语句导入MaxCompute的数据至Hologres,示例如下。INSERT INTO holo_test2 SELECT id as id, name as name, class as class FROM holo_test1;
- 查询表数据。
在Hologres中查询导入的MaxCompute表数据。示例SQL语句如下。
SELECT * FROM holo_test2;
导入MaxCompute的分区表数据至Hologres并查询
- 准备MaxCompute的分区表数据。
在MaxCompute中创建一张分区数据表,详情请参见分区和列操作。您也可以选取已创建的分区表。示例选取数据地图中已创建的分区表odps_test2,SQL语句如下。
CREATE TABLE odps_test2 ( shop_name string, customer_id string, total_price INT ) PARTITIONED BY (sale_date string); INSERT overwrite table odps_test2 partition (sale_date='2013')values ('shop', '1234', 12); INSERT overwrite table odps_test2 partition (sale_date='2014')values ('rest', '1111', 13); INSERT overwrite table odps_test2 partition (sale_date='2015')values ('texy', '2222', 14);
- 创建外部表。
在Hologres中创建一张用于映射MaxCompute源数据表的外部表。示例SQL语句如下。
CREATE FOREIGN TABLE table1_odps ( shop_name text, customer_id text, total_price int8, sale_date text ) SERVER odps_server OPTIONS (project_name '<odpsprojectname>', table_name 'odps_test2');
- 创建存储表。
在Hologres中创建一张用于接收MaxCompute源表数据的存储表。MaxCompute的分区与Hologres的分区无强映射关系。您可以导入MaxCompute的分区表数据至Hologres的分区表或非分区表。本次实验导入MaxCompute的分区表数据至Hologres的分区表中。示例SQL语句如下。
CREATE TABLE table1_holo ( shop_name text, customer_id text, total_price int8, sale_date text ) PARTITION BY LIST (sale_date);
说明 :Hologres不支持多级分区。MaxCompute的多级分区表数据可以导入至Hologres的非分区表或者一级分区表。 - 创建子分区。
在Hologres中创建一张用于接收分区数据的子分区表。示例SQL语句如下。
CREATE TABLE table1_holo_0001 PARTITION of table1_holo for VALUES in ('2015');
- 导入数据至Hologres。
使用
INSERT
语句导入MaxCompute的数据至Hologres的子分区表中,示例如下。INSERT INTO table1_holo_0001 SELECT shop_name as shop_name, customer_id as customer_id, total_price as total_price, sale_date as sale_date from table1_odps WHERE sale_date = '2015';
- 查询表数据。
在Hologres中查询导入的MaxCompute表数据。示例SQL语句如下。
SELECT * FROM table1_holo;
在文档使用中是否遇到以下问题
更多建议
匿名提交