百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

数据导入——通过外部表同步数据(外部数据导入excel)

wxin55 2024-11-10 12:17 9 浏览 0 评论

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

Doris 外部表目前支持的数据源包括:
      MySQL
      Oracle
      PostgreSQL
      SQLServer
      Hive
      Iceberg
      ElasticSearch
      
在 doris fe 和 be 目录下创建 jdbc_drivers 目录,将 doris 外部表支持的数据源 jar,放到此目录下;

RESOURCE 类型为 JDBC

官方支持的其它 type : https://doris.apache.org/zh-CN/docs/sql-manual/sql-reference/Data-Definition-Statements/Create/CREATE-RESOURCE?_highlight=resource

https://zhuanlan.zhihu.com/p/591172702

1. 创建 JDBC Resource
drop RESOURCE gp_resource;
CREATE  RESOURCE gp_resource PROPERTIES (
   "type"="jdbc",
   "user"="root",
   "password"="root",
   "jdbc_url" = "jdbc:mysql://cdh003:3306/test?useSSL=false",
   "driver_url" = "file:///opt/apache-doris-2.0.3-bin-x64/be/jdbc_drivers/mysql-connector-java-8.0.21.jar",
   "driver_class" = "com.mysql.cj.jdbc.Driver"
);
2. 创建外部表
drop TABLE test.table_mysql;
CREATE  TABLE test.table_mysql
   (
  `s_id` varchar(20) ,
  `c_id` varchar(20) ,
  `s_score` int(3) 
   )
   ENGINE=JDBC
   PROPERTIES
   (
        "resource" = "gp_resource",
        "table" = "score",
        "table_type"="mysql"
   );
select * from table_mysql;

RESOURCE 类型为 odbc_catalog

参考 : https://blog.csdn.net/m0_52735414/article/details/128847022

官方支持的其它 ODBC : https://doris.apache.org/zh-CN/docs/advanced/resource?_highlight=odbc#odbc

linux odbc 安装

1. linux 上提前安装好 ODBC,及相关数据库对应的 odbc 驱动;
		所有的 BE 节点都安装上相同的Driver,并且安装路径相同,同时有相同的 ${DORIS_HOME}/be/conf/odbcinst.ini 的配置。

 2. 在 BE 节点的 conf/odbcinst.ini,添加注册的的ODBC 驱动([MySQL ODBC 5.3.11]这部分)。
		在文件 odbcinst.ini 末尾新增以下内容:
          # Driver from the mysql-connector-odbc package
          # Setup from the unixODBC package
          [MySQL ODBC 5.3.11]
          Description     = ODBC for MySQL
          Driver= /usr/lib64/libmyodbc5w.so.
          FileUsage = 1

3. 在Doris中 建Resource
        CREATE EXTERNAL RESOURCE `mysql_5_3_11` PROPERTIES (
        "host" = "hadoop1", 
        "port" = "3306",
        "user" = "root", 
        "password" = "000000", 
        "database" = "test", 
        "table" = "test_cdc",
        "driver" = "MySQL ODBC 5.3.11", -- 名称要和上面[]里的名称一致
        "odbc_type" = "mysql",
        "type" = "odbc_catalog");

4. 基于 Resource 创建Doris 外表
        CREATE EXTERNAL TABLE `test_odbc_5_3_11` (
        `id` int NOT NULL ,
        `name` varchar(255) null
        ) ENGINE=ODBC 
        COMMENT "ODBC" 
        PROPERTIES (
        "odbc_catalog_resource" = "mysql_5_3_11", 	-- 名称就是 resource 的名称
        "database" = "test_doris", 
        "table" = "test_cdc"
        );
5. 插入数据
    在 MySQL 端插入数据,在 ODBC 和 doris 都可以通过select 语句获取插入的数据;
    在 doris 端插入数据,在 ODBC 和 MySQL 都可以通过select 语句获取插入的数据;
    在 ODBC 端插入数据,在 doris 和 MySQL 都可以通过select 语句获取插入的数据;

不管在 ODBC,MySQL还是 doris 端,任何一端执行 insert 语句,在另外两个都可以通过 select 语句获取插入的数据;

直接创建 ENGINE=mysql

官方支持的其它 ENGINE : https://doris.apache.org/zh-CN/docs/sql-manual/sql-reference/Data-Definition-Statements/Create/CREATE-EXTERNAL-TABLE/

需要源码进行重新编译,否则建完表后执行查询语句报 [INTERNAL_ERROR]Don't support MySQL table, you should rebuild Doris with WITH_MYSQL option ON 错;
		1. 找到 doris 源码家目录下 build.sh 文件; 
		2. 将 WITH_MYSQL='OFF' 改成 WITH_MYSQL='ON';
		3. 重新编译;

CREATE EXTERNAL TABLE demo.student
(
  `s_id` varchar(20) NOT NULL,
  `s_name` varchar(20) NOT NULL DEFAULT '',
  `s_birth` varchar(20) NOT NULL DEFAULT '',
  `s_sex` varchar(10) NOT NULL DEFAULT ''
)
ENGINE=mysql
PROPERTIES
(
    "host" = "cdh003",
    "port" = "3306",
    "user" = "root",
    "password" = "root",
    "database" = "test",
		"table" = "student",
		"charset" = "utf8mb4"
);

ENGINE=hive

将引擎改成 hive 时,在doris 2 的版本时执行查询语句会提示 :  Unexpected exception: Hive external table is not supported, try to use hive catalog please;
解决方法 : doris 版本减低到 1 的版本,或者使用 hive catalog 来查询 hive 数据;

doris 1 版本 : 
CREATE TABLE table_hive
(
  id TINYINT,
  name VARCHAR(50),
  age INT
)
ENGINE=hive
PROPERTIES
(
  "database" = "zz_test",
  "table" = "a1",
  "hive.metastore.uris" = "thrift://cdh005:9083"
);
select * from table_hive;

doris 2 版本 : 目前只支持 查询;
CREATE CATALOG hive PROPERTIES (
    'type'='hms',
    'hive.metastore.uris' = 'thrift://cdh005:9083'
);
SWITCH hive;
select * from table_hive;

相关推荐

ES6中 Promise的使用场景?(es6promise用法例子)

一、介绍Promise,译为承诺,是异步编程的一种解决方案,比传统的解决方案(回调函数)更加合理和更加强大在以往我们如果处理多层异步操作,我们往往会像下面那样编写我们的代码doSomething(f...

JavaScript 对 Promise 并发的处理方法

Promise对象代表一个未来的值,它有三种状态:pending待定,这是Promise的初始状态,它可能成功,也可能失败,前途未卜fulfilled已完成,这是一种成功的状态,此时可以获取...

Promise的九大方法(promise的实例方法)

1、promise.resolv静态方法Promise.resolve(value)可以认为是newPromise方法的语法糖,比如Promise.resolve(42)可以认为是以下代码的语...

360前端一面~面试题解析(360前端开发面试题)

1.组件库按需加载怎么做的,具体打包配了什么-按需加载实现:借助打包工具(如Webpack的require.context或ES模块动态导入),在使用组件时才引入对应的代码。例如在V...

前端面试-Promise 的 finally 怎么实现的?如何在工作中使用?

Promise的finally方法是一个非常有用的工具,它无论Promise是成功(fulfilled)还是失败(rejected)都会执行,且不改变Promise的最终结果。它的实现原...

最简单手写Promise,30行代码理解Promise核心原理和发布订阅模式

看了全网手写Promise的,大部分对于新手还是比较难理解的,其中几个比较难的点:状态还未改变时通过发布订阅模式去收集事件实例化的时候通过调用构造函数里传出来的方法去修改类里面的状态,这个叫Re...

前端分享-Promise可以中途取消啦(promise可以取消吗)

传统Promise就像一台需要手动组装的设备,每次使用都要重新接线。而Promise.withResolvers的出现,相当于给开发者发了一个智能遥控器,可以随时随地控制异步操作。它解决了三大...

手写 Promise(手写输入法 中文)

前言都2020年了,Promise大家肯定都在用了,但是估计很多人对其原理还是一知半解,今天就让我们一起实现一个符合PromiseA+规范的Promise。附PromiseA+规范地址...

什么是 Promise.allSettled()!新手老手都要会?

Promise.allSettled()方法返回一个在所有给定的promise都已经fulfilled或rejected后的promise,并带有一个对象数组,每个对象表示对应的pr...

前端面试-关于Promise解析与高频面试题示范

Promise是啥,直接上图:Promise就是处理异步函数的API,它可以包裹一个异步函数,在异步函数完成时抛出完成状态,让代码结束远古时无限回掉的窘境。配合async/await语法糖,可...

宇宙厂:为什么前端离不开 Promise.withResolvers() ?

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发。1.为什么需要Promise.with...

Promise 新增了一个超实用的 API!

在JavaScript的世界里,Promise一直是处理异步操作的神器。而现在,随着ES2025的发布,Promise又迎来了一个超实用的新成员——Promise.try()!这个新方法简...

一次搞懂 Promise 异步处理(promise 异步顺序执行)

PromisePromise就像这个词的表面意识一样,表示一种承诺、许诺,会在后面给出一个结果,成功或者失败。现在已经成为了主流的异步编程的操作方式,写进了标准里面。状态Promise有且仅有...

Promise 核心机制详解(promise机制的实现原理)

一、Promise的核心状态机Promise本质上是一个状态机,其行为由内部状态严格管控。每个Promise实例在创建时处于Pending(等待)状态,此时异步操作尚未完成。当异步操作成功...

javascript——Promise(js实现promise)

1.PromiseES6开始支持,Promise对象用于一个异步操作的最终完成(包括成功和失败)及结果值的表示。简单说就是处理异步请求的。之所以叫Promise,就是我承诺,如果成功则怎么处理,失败怎...

取消回复欢迎 发表评论: