web-dev-qa-db-ja.com

Oracleの既存のテーブルでddlスクリプトを生成(または取得)するにはどうすればよいですか? Hiveで再作成する必要があります

Oracleの既存のテーブルにDDLスクリプトを生成するにはどうすればよいですか? OracleテーブルにあるいくつかのテーブルをHiveに再作成する必要があるプロジェクトに取り組んでいます。

8
VSJ

SQLクライアントがこれをサポートしていない場合は、dbms_metadataパッケージを使用して、データベース内のほぼすべてのソースを取得します。

テーブルの場合、次のようなものを使用します。

select dbms_metadata.get_ddl('TABLE', 'YOUR_TABLE_NAME')
from dual;

これは、すべてのテーブルに対して一度に行うこともできます。

select dbms_metadata.get_ddl('TABLE', table_name)
from user_tables;

出力をSQLスクリプトにスプールします。

詳細はマニュアルにあります: http://docs.Oracle.com/cd/E11882_01/appdev.112/e40758/d_metada.htm

14

@a_horse_with_no_nameの答えを少し拡張するだけです。 DBMS_METADATAを使用すると、出力を正しく取得するために、SQL*Plusの形式に注意する必要がある場合があります。

たとえば、SCOTT.EMPテーブルのDDLを取得したいとします。

SQL> select dbms_metadata.get_ddl('TABLE', 'EMP')
  2  from dual;

DBMS_METADATA.GET_DDL('TABLE','EMP')
--------------------------------------------------------------------------------

  CREATE TABLE "SCOTT"."EMP"
   (    "EMPNO" NUMBER(4,0),
        "ENAME" VARCHAR2(10),


SQL>

しかし、それは私が期待したことではありません。

したがって、フォーマットを適切に設定すると、希望する出力が得られます

SQL> set long 100000
SQL> set head off
SQL> set echo off
SQL> set pagesize 0
SQL> set verify off
SQL> set feedback off
SQL> select dbms_metadata.get_ddl('TABLE', 'EMP')
  2  from dual;

  CREATE TABLE "SCOTT"."EMP"
   (    "EMPNO" NUMBER(4,0),
        "ENAME" VARCHAR2(10),
        "JOB" VARCHAR2(9),
        "MGR" NUMBER(4,0),
        "HIREDATE" DATE,
        "SAL" NUMBER(7,2),
        "COMM" NUMBER(7,2),
        "DEPTNO" NUMBER(2,0),
         CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS"  ENABLE,
         CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO")
          REFERENCES "SCOTT"."DEPT" ("DEPTNO") ENABLE
   ) SEGMENT CREATION IMMEDIATE
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS"

SQL>
5
Lalit Kumar B