How to Partition a Non-partitioned Table [ID 1070693.6]

How to Partition a Non-partitioned Table [ID 1070693.6]


 

Modified 03-MAR-2010     Type BULLETIN     Status PUBLISHED

 

 

 

PURPOSE

You have a table that is not partitioned that you would like to make into a partitioned table.  This article describes four possible methods for partitioning a non-partitioned table.

 

These steps can also be used to change other partitioning characteristics such as adding subpartitioning to a partitioned table.

 

SCOPE & APPLICATION

Users needing to partition a non-partitioned table.

 

RELATED DOCUMENTS

Note:72332.1  DIAGNOSING ORA-14097 ON ALTER TABLE EXCHANGE PARTITION

Note:105317.1 Section "VII.7 Partition exchanges

Note:472449.1       How To Partition Existing Table Using DBMS_Redefinition

 

You can partition a non-partitioned table in one of four ways:

 

A)  Export/import method

 

B)  Insert with a subquery method

 

C)  Partition exchange method

 

D)  DBMS_REDEFINITION

 

Either of these four methods will create a partitioned table from an existing non-partitioned table.

 

A. Export/import method

   --------------------

 

1)  Export your table:

 

    exp usr/pswd tables=numbers file=exp.dmp

 

2)  Drop the table:

 

    drop table numbers;

 

3)  Recreate the table with partitions:

 

    create table numbers (qty number(3), name varchar2(15))

    partition by range (qty)

    (partition p1 values less than (501),

     partition p2 values less than (maxvalue));

 

4)  Import the table with ignore=y:

 

    imp usr/pswd file=exp.dmp ignore=y

 

    The ignore=y causes the import to skip the table creation and

    continues to load all rows.

 

 

B. Insert with a subquery method

   -----------------------------

 

1)  Create a partitioned table:

 

    create table partbl (qty number(3), name varchar2(15))

    partition by range (qty)

    (partition p1 values less than (501),

     partition p2 values less than (maxvalue));

 

2)  Insert into the partitioned table with a subquery from the

    non-partitioned table:

 

    insert into partbl (qty, name)

       select * from origtbl;

 

3)  If you want the partitioned table to have the same name as the

    original table, then drop the original table and rename the

    new table:

 

    drop table origtbl;

    alter table partbl rename to origtbl;

 

C. Partition Exchange method

   -------------------------

 

ALTER TABLE EXCHANGE PARTITION can be used to convert a partition (or

subpartition) into a non-partitioned table and a non-partitioned table into a

partition (or subpartition) of a partitioned table by exchanging their data

and index segments.

 

1) Create table dummy_t as select with the required partitions

 

2) Alter table EXCHANGE partition partition_name

       with table non-partition_table;

 

 

Example

-------

 

SQL> CREATE TABLE p_emp

   2     (sal NUMBER(7,2))

   3      PARTITION BY RANGE(sal)

   4      (partition emp_p1 VALUES LESS THAN (2000),

   5       partition emp_p2 VALUES LESS THAN (4000));

 Table created.

 

 

 SQL> SELECT * FROM emp;

     EMPNO ENAME      JOB             MGR HIREDATE        SAL

 --------- ---------- --------- --------- --------- ---------

      7369 SMITH      CLERK          7902 17-DEC-80       800

      7499 ALLEN      SALESMAN       7698 20-FEB-81      1600

      7521 WARD       SALESMAN       7698 22-FEB-81      1250

      7566 JONES      MANAGER        7839 02-APR-81      2975

      7654 MARTIN     SALESMAN       7698 28-SEP-81      1250

      7698 BLAKE      MANAGER        7839 01-MAY-81      2850

      7782 CLARK      MANAGER        7839 09-JUN-81      2450

      7788 SCOTT      ANALYST        7566 19-APR-87      3000

      7839 KING       PRESIDENT           17-NOV-81      5000

      7844 TURNER     SALESMAN       7698 08-SEP-81      1500

      7876 ADAMS      CLERK          7788 23-MAY-87      1100

      7900 JAMES      CLERK          7698 03-DEC-81       950

      7902 FORD       ANALYST        7566 03-DEC-81      3000

      7934 MILLER     CLERK          7782 23-JAN-82      1300

 14 rows selected.

 

SQL> CREATE TABLE dummy_y as SELECT sal

 FROM emp WHERE  sal<2000;

 Table created.

 

SQL> CREATE TABLE dummy_z as SELECT sal FROM emp WHERE sal

 BETWEEN 2000 AND 3999;

 Table created.

 

SQL> alter table p_emp exchange partition emp_p1

 with table dummy_y;

 Table altered.

 

SQL> alter table p_emp exchange partition emp_p2

 with table dummy_z;

 Table altered.

 

 

D. DBMS_REDEFINITION

   -----------------

 

See Note 472449.1 "How To Partition Existing Table Using DBMS_Redefinition" for detailed instructions.

 

在线重定义参考:

http://blog.csdn.net/tianlesoftware/archive/2011/03/02/6218693.aspx

 

 

 

 

------------------------------------------------------------------------------

QQ: 492913789

Email:ahdba@qq.com

Blog: http://www.cndba.cn/dave



DBA1 群:62697716(); DBA2 群:62697977()

DBA3 群:62697850   DBA 超级群:63306533;    

聊天 群:40132017

--加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请

To optimize queries in Hive, you can follow these best practices: 1. Use partitioning: Partitioning is a technique of dividing a large table into smaller, more manageable parts based on specific criteria such as date, region, or category. It can significantly improve query performance by reducing the amount of data that needs to be scanned. 2. Use bucketing: Bucketing is another technique of dividing a large table into smaller, more manageable parts based on the hash value of a column. It can improve query performance by reducing the number of files that need to be read. 3. Use appropriate file formats: Choose the appropriate file format based on the type of data and the query patterns. For example, ORC and Parquet formats are optimized for analytical queries, while Text and SequenceFile formats are suitable for batch processing. 4. Optimize data storage: Optimize the way data is stored on HDFS to improve query performance. For example, use compression to reduce the amount of data that needs to be transferred across the network. To create a partition table with Hive, you can follow these steps: 1. Create a database (if it doesn't exist) using the CREATE DATABASE statement. 2. Create a table using the CREATE TABLE statement, specifying the partition columns using the PARTITIONED BY clause. 3. Load data into the table using the LOAD DATA statement, specifying the partition values using the PARTITION clause. Here's an example: ``` CREATE DATABASE my_db; USE my_db; CREATE TABLE my_table ( id INT, name STRING ) PARTITIONED BY (date STRING); LOAD DATA LOCAL INPATH '/path/to/data' OVERWRITE INTO TABLE my_table PARTITION (date='2022-01-01'); ``` This creates a table called `my_table` with two columns `id` and `name`, and one partition column `date`. The data is loaded into the table with the partition value `2022-01-01`.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值