Technology Blogs by Members
Explore a vibrant mix of technical expertise, industry insights, and tech buzz in member blogs covering SAP products, technology, and events. Get in the mix!
cancel
Showing results for 
Search instead for 
Did you mean: 
Former Member

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...

  下一篇: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...

Labels in this area