您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

SQLScript 查询导出

前提条件

要以开发人员身份执行查询导出,您需要 EXPORT 系统权限。

过程

要导出过程的一个或多个查询,请使用以下语法:

EXPORT ALL AS CSV INTO  [WITH ] ON  FOR 

存储导出文件的服务器路径指定为 <path>。

 ::= 

有关 的详细信息,请参阅 SAP Help Portal 上 SAP HANA SQL 和系统视图参考中的 EXPORT 语句(数据导入导出)。

SELECT 语句外,您还可以导出以下语句类型:

  • 嵌套调用 DML(INSERTDELETE...)

  • DDL (CREATE TABLE, ...)

  • 动态 SQL(EXPORT 以外的任何内容)

    有关要导出查询的信息由 定义。

     ::=  [{, }]
    

    ::= ( [ ] LINE [ COLUMN ] [ PASS ( | ALL)] )

    ::= [.]

    ::=

    ::=

    ::=

    通过 ,您可以在逗号分隔的列表中定义多个要导出的查询。对于每个查询,必须使用 指定过程的名称,以指示查询所在的位置。如果 与 中的过程相同,则可以省略

    您还需要指定行信息、 和列信息 。行号必须与 语句的第一行相对应。如果省略列编号,则导出此行上的所有语句(通常只有一个)。否则,列必须与 语句的第一个字符匹配。

    行和列信息通常包含在 SQLScript 生成的查询的注释中,可以从中获取。例如,监控视图 M_ACTIVE_PROCEDURES 或 PlanViz 中的语句统计信息显示执行的查询以及注释。

    考虑以下两个过程:

    1 CREATE PROCEDURE proc_one (...) 
    

    2 AS

    3 BEGIN

    ...

    15 tab = SELECT * FROM :t;

    ...

    30 CALL proc_two (...);

    ...

    98 END;

    1 CREATE PROCEDURE proc_two (...)

    2 AS

    3 BEGIN

    ...

    27 temp = SELECT * FROM :v; temp2 = SELECT * FROM :v2;

    ...

    40 END;

    如果要导出表变量 tab 和 temp 的两个查询,则应按如下方式配置

    (proc_one LINE 15), (proc_two LINE 27 COLUMN 4)

    对于表变量 temp 的查询,我们已指定列编号,因为在一行中存在多个表变量分配,我们只想导出第一个查询。

    要成功导出这些查询,导出流程需要执行触发包含查询的过程的执行的过程调用。因此,需要在导出配置中指定 ,如下所示:

     ::= CALL  ()

    有关 的信息,请参阅 CALL。

    以上给定示例的导出语句如下:

    EXPORT ALL AS CSV INTO '/tmp'  ON (proc_one LINE 15), ( proc_two LINE 27 COLUMN 4) FOR CALL PROC_ONE (...);

    如果要导出多次执行的查询,可以使用 指定应导出哪个执行。如果省略 ,则仅导出查询的首次执行。如果需要导出多个通行证,但不是全部导出,则需要使用相应的通行证编号多次指定相同的位置。

    1 CREATE PROCEDURE MYSCHEMA.PROC_LOOP (...) 
    

    2 AS

    3 BEGIN

    ...

    FOR i IN 1 .. 1000 DO

    ...

    34 temp = SELECT * FROM :v;

    ...

    37 END FOR;

    ...

    40 END;

    在上述示例中,我们要在第 34 行导出查询,但仅导出第 2 和第 30 个循环迭代的快照。考虑到过程调用为 PROC_LOOP,导出语句如下所示:

    EXPORT ALL AS CSV INTO '/tmp' ON (myschema.proc_loop LINE 34 PASS 2), (myschema.proc_loop LINE 34 PASS 30) FOR CALL PROC_LOOP(...);

    如果要导出所有迭代的快照,则需要使用 PASS ALL:

    EXPORT ALL AS CSV INTO '/tmp' ON (myschema.proc_loop LINE 34 PASS ALL) FOR CALL PROC_LOOP(...);

    SQLScript 查询导出功能使用以下名称模式为给定路径 <path> 下的每个导出查询创建一个子目录:----。例如,第一个提到的导出语句的目录如下:

    |_ /tmp
    

    |_ MYSCHEMA-PROC_LOOP-34-10-2

    |_Query.sql

    |_index

    |_export

    |_ MYSCHEMA-PROC_LOOP-34-10-30

    |_Query.sql

    |_index

    |_export

    导出的 SQLScript 查询存储在名为 Query.sql 的文件中,该查询的所有相关基本对象都存储在目录索引和导出中,与典型目录导出相同。

    可以使用 IMPORT 语句导入导出的对象,包括临时表及其数据。

    有关 IMPORT 的详细信息,请参阅 SAP Help Portal 上 SAP HANA SQL 和系统视图参考中的 IMPORT 语句(数据导入导出)。

    备注不支持函数中的查询,因此无法导出。 备注分布式系统不支持查询导出。仅支持单节点系统。