CREATE EXTERNAL TABLE … ENGINE = DATASTREAM

通过 ENGINE = DATASTREAM 子句创建从远程 DataStream(jstfu)服务读取数据的 MatrixOne 外部表。该表只读,必须提供 serverporttable 选项,并支持可选的 recheckapikey 选项。

描述

CREATE EXTERNAL TABLE ... ENGINE = DATASTREAM 将 MatrixOne 外部表映射到远程 DataStream(jstfu)服务提供的数据源。查询该表时,MatrixOne 会按需从服务端流式读取数据。该表为只读:支持 SELECT,拒绝 INSERTUPDATEDELETE 写入。

该语句必须提供 serverporttable 选项。可选的 recheck 选项控制下推到服务端的谓词是否在本地重新执行;可选的 apikey 选项用于向服务端出示共享密钥。

语法

CREATE EXTERNAL TABLE [IF NOT EXISTS] [db.]table_name (
    column1 type1,
    column2 type2,
    ...
) ENGINE = DATASTREAM [WITH ("option" = 'value' [, "option" = 'value'] ...)];

参数

选项

是否必填

说明

server

DataStream 服务端的主机名或 IP 地址。

port

DataStream 服务端的端口号。必须是合法端口号,非数字值会被拒绝。

table

服务端上要读取的数据源名称。

recheck

是否在本地重新执行下推的谓词。true(默认)将下推的过滤条件视为提示,并在本地重新校验行;false 则信任服务端对下推谓词的处理。

apikey

可选,向服务端出示的共享密钥。使用 env:NAME 形式时,在扫描阶段从进程环境变量 NAME 读取密钥,从而避免密钥被写入目录元数据、执行计划或语句日志。

使用说明

  • 只读:DataStream 外部表拒绝 INSERTUPDATEDELETE,报错 cannot insert/update/delete from external table

  • 选项校验:选项在创建表时校验。重复、未知或非法的选项会以 invalid input 错误拒绝。

  • 密钥脱敏SHOW CREATE TABLE 会往返输出 DDL,但不会显示 apikey 的值。

  • 过滤条件重校验:无法下推的谓词始终在本地执行,即使 recheck 设为 false 也会生效。

示例

以下示例创建两个 DataStream 外部表,通过 SHOW CREATE TABLE 查看其 DDL,并演示缺少必填选项时的校验错误:

DROP DATABASE IF EXISTS datastream_doc_demo;
CREATE DATABASE datastream_doc_demo;
USE datastream_doc_demo;

CREATE EXTERNAL TABLE ext_file (
    col1 INT,
    col2 DATETIME,
    col3 VARCHAR(50),
    col4 TEXT
) ENGINE = DATASTREAM WITH ('server' = '127.0.0.1', 'port' = '4444', 'table' = 'file_numbers');

SHOW CREATE TABLE ext_file;

CREATE EXTERNAL TABLE ext_keyed (
    col1 INT,
    col2 DATETIME,
    col3 VARCHAR(50),
    col4 TEXT
) ENGINE = DATASTREAM WITH ('server' = '127.0.0.1', 'port' = '4444', 'table' = 'jdbc_numbers', 'recheck' = 'false', 'apikey' = 'top-secret');

SHOW CREATE TABLE ext_keyed;

-- Expected-Success: false
CREATE EXTERNAL TABLE ds_missing_port (a INT) ENGINE = DATASTREAM WITH ('server' = '127.0.0.1');

DROP DATABASE datastream_doc_demo;

相关参考