通过外部表同步数据
所有文档

          数据仓库 Palo

          通过外部表同步数据

          Palo 可以创建通过 ODBC 协议访问的外部表。创建完成后,可以通过 SELECT 语句直接查询外部表的数据,也可以通过 INSERT INTO SELECT 的方式导入外部表的数据。

          本文档主要介绍如何创建通过 ODBC 协议访问的外部表,以及如何导入这些外部表的数据。目前支持的数据源包括:

          • MySQL
          • Oracle
          • PostgreSQL

          创建外部表

          创建 ODBC 外部表的详细介绍请参阅 CREATE ODBC TABLE 语法帮助手册。

          这里仅通过示例说明使用方式。

          1. 创建 ODBC Resource

            ODBC Resource 的目的是用于统一管理外部表的连接信息。

            CREATE EXTERNAL RESOURCE `oracle_odbc`
            PROPERTIES (
                "type" = "odbc_catalog",
                "host" = "192.168.0.1",
                "port" = "8086",
                "user" = "test",
                "password" = "test",
                "database" = "test",
                "odbc_type" = "oracle",
                "driver" = "Oracle"
            );

            这里我们创建了一个名为 oracle_odbc 的 Resource,其类型为 odbc_catalog,表示这是一个用于存储 ODBC 信息的 Resource。odbc_typeoracle,表示这个 OBDC Resource 是用于连接 Oracle 数据库的。关于其他类型的资源,具体可参阅 资源管理 文档。

          2. 创建外部表

            CREATE EXTERNAL TABLE `ext_oracle_tbl` (
              `k1` decimal(9, 3) NOT NULL COMMENT "",
              `k2` char(10) NOT NULL COMMENT "",
              `k3` datetime NOT NULL COMMENT "",
              `k5` varchar(20) NOT NULL COMMENT "",
              `k6` double NOT NULL COMMENT ""
            ) ENGINE=ODBC
            COMMENT "ODBC"
            PROPERTIES (
                "odbc_catalog_resource" = "oracle_odbc",
                "database" = "test",
                "table" = "baseall"
            );

            这里我们创建一个 ext_oracle_tbl 外部表,并引用了之前创建的 oracle_odbc Resource。

          连接百度云数据库 RDS

          1. 创建 RDS

            可以通过 RDS快速入门教程 创建一个 RDS 示例。

            注意:创建 RDS 实例时,网络类型 -> 选择网络 处,需要选择和 Palo 集群相同的网络(VPC)。可用区可以不同。

          2. 创建资源

            CREATE EXTERNAL RESOURCE `rds_odbc`
            PROPERTIES (
                "type" = "odbc_catalog",
                "host" = "mysql56.rdsxxxxx.rds.gz.baidubce.com",
                "port" = "3306",
                "user" = "rdsroot",
                "password" = "12345",
                "odbc_type" = "mysql",
                "driver" = "MySQL"
            );

            需修改其中 hostportuserpassword 对应的参数。 host port 可以在 RDS 实例信息也查看。user 和 password 需要在 RDS 控制台创建账户后获取。

          3. 创建外部表

            CREATE EXTERNAL TABLE `mysql_table` (
               k1 int,
               k2 int
            ) ENGINE=ODBC
            PROPERTIES (
                "odbc_catalog_resource" = "rds_odbc",
                "database" = "mysql_db",
                "table" = "mysql_tbl"
            );

            创建之后,就可以进行查询等操作了。

          导入数据

          1. 创建 Palo 表

            这里我们创建一张 Palo 的表,列信息和上一步创建的外部表 ext_oracle_tbl 一样:

            CREATE EXTERNAL TABLE `palo_tbl` (
              `k1` decimal(9, 3) NOT NULL COMMENT "",
              `k2` char(10) NOT NULL COMMENT "",
              `k3` datetime NOT NULL COMMENT "",
              `k5` varchar(20) NOT NULL COMMENT "",
              `k6` double NOT NULL COMMENT ""
            )
            COMMENT "Palo Table"
            DISTRIBUTED BY HASH(k1) BUCKETS 2;
            PROPERTIES (
                "replication_num" = "1"
            );

            关于创建 Palo 表的详细说明,请参阅 CREATE-TABLE 语法帮助。

          2. 导入数据 (从 ext_oracle_tbl表 导入到 palo_tbl 表)

            INSERT INTO palo_tbl SELECT k1,k2,k3 FROM ext_oracle_tbl limit 100;

            INSERT 命令是同步命令,返回成功,即表示导入成功。

          注意事项

          • 必须保证外部数据源与 Palo 集群在同一个VPC内,并且 Compute Node 可以和外部数据源的网络是互通的。
          • ODBC 外部表本质上是通过单一 ODBC 客户端访问数据源,因此并不合适一次性导入大量的数据,建议分批多次导入。
          上一篇
          使用JDBC同步数据
          下一篇
          JSON格式数据导入说明