2.  创建列表和索引
  列表适用于如下一些场景:
    * 通常只是在一个或少量列上执行计算操作
    * 表在进行搜索时通常基于少量列上的值
    * 表有很多列
    * 表有很多行,并且通常进行的是列式操作(比如:聚集计算和where中字段值查找)
    * 需要很高的压缩率。

   我们来看一些列子
    –例1
    CREATE COLUMN TABLE tpch.nation
    (n_nationkey INT NOT NULL,
     n_name CHAR(25),
     n_regionkey INT,
     n_comment VARCHAR(152),
     PRIMARY KEY(n_nationkey)
    )

   –例2(分区,只适用于列表,分区键必须是主键的一部分)
   CREATE COLUMN TABLE tpch.lineitem
    (l_orderkey INT NOT NULL,l_partkey INT,
     l_suppkey INT,l_linenumber INT NOT NULL,
     l_quantity DECIMAL(10,2),l_extendedprice DECIMAL(10,2),
     l_discount DECIMAL(10,2),l_tax DECIMAL(10,2),
     l_returnflag CHAR(1),l_linestatus CHAR(1),
     l_shipdate DATE,l_commitdate DATE,l_receiptdate DATE,
     l_shipinstruct CHAR(25),l_shipmode CHAR(10),
     l_comment VARCHAR(44),
     PRIMARY KEY INVERTED VALUE (l_orderkey,l_linenumber)
    )
    PARTITION BY HASH (l_orderkey,l_linenumber) PARTITIONS 4,
    RANGE (l_shipdate) (   
       PARTITION ‘2011/01/01′<= VALUES <‘2011/04/01’,
       PARTITION ‘2011/04/01′<= VALUES <‘2011/07/01’,
       PARTITION ‘2011/07/01′<= VALUES <‘2011/10/01’,
       PARTITION OTHERS) 
    
    注意:对于HANA来说,行表不支持分区,只有列表支持。列表的一个分区最多支持21亿条记录,为了在列表中存放更多的记录,需要使用分区。

    在上面的创建列表的例子中,我们指定的“UNIQUE”或“PRIMARY KEY”约束,HANA会自动创建相应的索引。这些索引分为两种类型(仅适用于列表)
       *  INVERTED  VALUE     适合于范围查询或like查询
       *  INVERTED  HASH      使用HASH对组合唯一键或组合主键进行编码和压缩。对于等值查询(点查询),这种索引类型具有更好的性能;并且能够减少组合主键存储使用的内存数量。
  

    如果不指定,缺省是 INVERTED  VALUE。上面的INVERTED VALUE和INVERTED HASH 仅在UNIQUE和PRIMARY KEY约束中使用。下面是指定的示例
        PRIMARY KEY INVERTED VALUE (l_orderkey,l_linenumber)
        PRIMARY KEY INVERTED HASH (l_orderkey,l_linenumber)

        UNIQUE INVERTED VALUE (l_orderkey,l_linenumber)
        UNIQUE INVERTED HASH (l_orderkey,l_linenumber)

    创建列表上的索引

    列表的主键或唯一键定义的索引是主索引。在列表上还可以创建辅助索引。创建索引的基本语法如下:

         CREATE  INDEX <index_name> ON <table_name> (….) ….

    下面是一个示例:

         CREATE INDEX idx_phone ON tpch.customer(c_phone)

3.  列表的延迟加载和预加载 (行表不支持)

  SAP HANA 缺省情况下对列表采用的是延迟载机制。如果想在SAP HANA实例启动过程中对指定的列表数据进行加载,那么可以对表进行预加载设置。

  示例1:

      ALTER TABLE EMP PRELOAD ALL;   –预加载所有列的所有数据

  示例2:

      ALTER TABLE EMP PRELOAD (EMPNO,ENAME); –预加载指定的列

  示例3:

      ALTER TABLE EMP PRELOAD NONE –清除表中所有字段的预加载标志

  使用下面的查询可以查看表或字段的预加载标志:
   SELECT IS_PRELOAD FROM SYS.TABLES WHERE TABLE_NAME=‘LINEITEM’
   SELECT PRELOAD from SYS.TABLE_COLUMNS  WHERE TABLE_NAME=‘LINEITEM’

  4.  列表的加载和卸载
  可以把指定的表从内存中卸载,释放其占用的内存。也可以把已经卸载的表重新转载的内存中。只能对COLUMN TABLE进行这些操作
  示例1:
     UNLOAD  tpch.lineitem; 
  示例2:
     LOAD  tpch.customer DELTA ; –把列表的delta部分加载到内存
          LOAD  tpch.customer ALL;      –把列表所有部分,包括delta加载到内存

  5. 行表列表之间的转换
  HANA支持行表转换为列表,或者列表转换为行表。示例如下:
     ALTER TABLE accounts COLUMN THREADS 10 BATCH 10000  –行转列
     ALTER TABLE accounts  ROW THREADS 10   –列表转为行表

  上一篇:创建SCHEMA、表和索引 (1)

http://scn.sap.com/community/chinese/hana/blog/2014/01/03/sap-hana-%E5%AD%A6%E4%B9%A0%E7%B3%BB%E5%88%97-sql%E5%BC%80%E5%…

  下一篇:HANA SQL DMLs语句和事物控制语句

http://scn.sap.com/community/chinese/hana/blog/2014/01/06/sap-hana-%E5%AD%A6%E4%B9%A0%E7%B3%BB%E5%88%97-sql%E5%BC%80%E5%…

To report this post you need to login first.

Be the first to leave a comment

You must be Logged on to comment or reply to a post.

Leave a Reply