SQL Reference1.docx
《SQL Reference1.docx》由会员分享,可在线阅读,更多相关《SQL Reference1.docx(15页珍藏版)》请在冰豆网上搜索。
SQLReference1
TableManagement
∙Schema
_SYS_开头是系统自动创建的schema,客户无法自己创建
_SYS_BI:
系统控制信息
_SYS_BIC:
系统为客户化的schema
_SYS_REPO:
系统为报表需求,deploy创建的schema
_SYS_STATISTICS:
系统创建的存放统计信息的Schema
∙TableCreate
CREATE [] TABLE
[|||]
[WITH PARAMETERS(parameter_key_values),...]
Table_type:
column,row,historycolumn,globaltemporary,localtemporary
∙column,row:
针对大数据量的table,但是一次查询仅仅查询部分几个fields,应该使用Column-based,如果查询所有字段,但只有部分记录情况下,建议使用Row-basedTable
∙HistoryColumn:
logging_option:
:
=LOGGING|NOLOGGING[RETENTIONretention_period],LOGGING是默认设置
auto_merge_option:
:
=AUTOMERGE|NOAUTOMERGE,AUTOMERGE是默认设置
partition_clause:
:
=
PARTITIONBY[,|,]
PARTITIONBY
PARTITIONBY[,]
location_clause:
:
=AT[LOCATION]"port>"|("port>",..)可以将table创建到某一个指定的server,对于partition表,可以将不同的分区分布到不同的server上,如果不指定location,那么表会自动assign到某一个server上,location功能只在distributed环境中才能使用
∙创建ColumnTable
/*CreateColumnTable*/
create column table _sys_bic.col_test
(
col1 varchar(10),
col2 varchar(20),
col3 varchar(30),
primary key(col1)
);
∙创建RowTable
/*CreateRowTable*/
create row table _sys_bic.col_test
(
col1 varchar(10),
col2 varchar(20),
col3 varchar(30),
primary key(col1)
);
∙创建HistoryColumn表
/*Historycolumn*/
CREATEHISTORYCOLUMNTABLETST1
(
COL1VARCHAR(10),
COL2VARCHAR(20),
PRIMARYKEY(COL1)
);
∙ 创建GlobalTemporary表
/*GLOBALTEMPORARY*/
CREATEGLOBALTEMPORARYTABLETST1
(
COL1VARCHAR(10),
COL2VARCHAR(20),
PRIMARYKEY(COL1)
);
∙创建LocalTemporary表
∙LocalTemporary表命名必须以#开头
/*LocalTEMPORARY*/
CREATELOCALTEMPORARYTABLE#TST1
(
COL1VARCHAR(10),
COL2VARCHAR(20),
PRIMARYKEY(COL1)
);
∙创建带约束的Table
column_constraint:
:
=NULL|NOTNULL|UNIQUE[BTREE|CPBTREE]|PRIMARYKEY[BTREE|CPBTREE]
createcolumntableemp
(
empnovarchar(10),
empnamevarchar(10),
empidvarchar(20),
gendervarchar(10),
ageintnotnull,
constraintempid_unionUNIQUE(empid),
constraintgender_domaincheckgenderin('male','female'),
constraintage_domaincheck(age>0andage<150),
constraintpk_empprimarykey(empno)
)
∙基于Query创建Table
createcolumntableemp_backup
as
selectempno,empname,empid,age,gender
fromemp
∙创建automerge表
如果是AUTOMERGE表,那么是由memwacher来触发执行merge的
createcolumntabledept
(
deptnovarchar(10),
deptnamevarchar(20),
primarykey(deptno)
)
automerge;
createcolumntabledept
(
deptnovarchar(10),
deptnamevarchar(20),
primarykey(deptno)
)
noautomerge;
∙创建Partition分区表
∙HashPartition
/*HashPartition*/
createcolumntablemytab
(
c1int,
c2int,
c3int,
primarykey(c1,c2)
)
partitionbyhash(c1,c2)
partitions4;
/*HashPartition*/
createcolumntablemytab
(
c1int,
c2int,
c3int,
primarykey(c1,c2)
)
partitionbyhash(c1,c2)
partitionsget_num_servers();
∙AlterTable
ALTERTABLE
{||
||||
|||
||||
|||}
[WITHPARAMETERS(parameter_key_value,...)]
add_column_clause:
:
=ADD(column_definitioncolumn_constraint,...)
drop_column_clause:
:
=DROP(column_name,...)
alter_column_clause:
:
=ALTER(column_definition,...)
add_primary_key_clause:
:
=ADD[CONSTRAINTconstraint_name]PRIMARYKEY(column_name,...)
drop_primary_key_clause:
:
=DROPPRIMARYKEY
preload_clause:
:
=PRELOADALL|PRELOAD(column_name)|PRELOADNONE
add_statistics_clause:
:
=ADDSTATISTICSFORQUERYOPTIMIZER[(column_name,…)]
update_statistics_clause:
:
=UPDATESTATISTICSFORQUERYOPTIMIZER[(column_name,…)]
drop_statistics_clause:
:
=DROPSTATISTICSFORQUERYOPTIMIZER[(column_name,…)]
table_conversion_clause:
:
=[ALTERTYPE][ROWTHREADSint_const]|[COLUMNTHREADSint_constrBATCHbatch_size]
move_clause:
:
=MOVETOLOCATIONport>
add_partition_clause:
:
=ADDPARTITIONadd_partition_clause
move_partition_clause:
:
=MOVEPARTITIONTOport>
drop_partition_clause:
:
=DROPPARTITIONdrop_partition_clause
partition_by_clause:
:
=PARTITIONBYpartition_clause
merge_partition_by_clause:
:
=MERGEPARTITIONS
create_history_clause:
:
=CREATEHISTORY
drop_history_clause:
:
=DROPHISTORY
∙增加column
altertableemp
add(deptnovarchar(10),manager_numvarchar(10));
∙删除column
altertableemp
drop(deptno,managernum);
∙更改column类型
altertableemp
alter(deptnovarchar(20),managernumvarchar(20));
primarykey:
唯一标识记录信息的约束
∙增加constraint
altertableemp
add(constraintpk_empprimarykey(empno),
constraintage_domaincheck(age>0andage<150)
);
∙删除constraint
altertableemp
dropprimarykey,
dropconstraintage_domain;
∙增加statistics
altertableemp
addstatisticsforqueryoptimizer(age);
∙更新statistics
altertableemp
updatestatisticsforqueryoptimizer(age);
∙删除statistics
altertableemp
dropstatisticsforqueryoptimizer(age);
∙更改表类型
∙thread所指定的是在做tableconvert时候的进程数,此进程数的指定是根据可用的CPUCores来指定.默认情况不指定threads的情况,会从indexserver.ini文件中读取TABLE_CONVERSION_PARALLELISM参数,此参数就是用于标记可用的CPUCores数量
altertableempaltertyperowthreads10;
altertableempaltertypecolumnthreads10;
∙更改Location
∙在Distributed系统环境下,将某一张表从一个系统移到另一个系统去
move_clause:
:
=MOVETOLOCATIONport>
altertabletest1movetolocationserver2:
3015
∙增加Partition
。
。
。
。
delete和drop,truncate
drop:
删除表(表结构,表数据,写日志)
delete:
删除表数据,写日志(先写日志,后做DB操作)(删除表数据:
有选择性的删除)
truncate:
清空表数据,不写日志(速度快,不能简单恢复)---oracle:
闪回技术
∙DeleteTable
DELETE[HISTORY]FROM[WHERE];
∙如果指定HISTORY:
仅仅删除HistoryTable的History-part
∙如果要彻底删除History,需要执行一下SQL
ALTERSYSTEMRECLAIMVERSIONSPACE;
MERGEHISTORYDELTAof;
∙Export
/****导出数据****/
export"TST"."*"ASCSVINTO'/opt/exp';
export"TST"."*"ASBINARYINTO'/opt/exp2';
/****只导出结构****/
EXPORTTST.TESTASBINARYINTO'/opt/exp2'WITHCATALOGONLY;
∙Import
IMPORTTST.TESTASBINARYFROM'/opt/exp';
IMPORTALLASCSVFROM'/opt/exp/Training_data_export/EPM_MODEL/Tables/CSV';
∙UpdateTable
UPDATE[[AS]name][WHERE][WITHPARAMETERS(,..)]
updatetest1setsalary=salary+1000;
HANA中Index有两种意义:
1.DBindex:
索引
2.数据存储
HANAServer
1.NameServer:
IP,Host,数据的Mapping关系
2.IndexServer:
实际存储数据的(Memory)
3.statisticsServer:
针对本server的一些统计信息
MergeDeltaIndex
update"SAPBHD"."/BIC/AHR_SFS0100"mergedeltaindex;
∙InsertTable
insertintotest1values('a1','a2','a3');
insertintotest2selectc1,c2,c3fromtest1wherec1='a1';
∙Load
将columnTable装载到Memory中
LOAD{DELTA|ALL|(column_name,)}
∙DELTA:
仅仅把Delta部分load到memory
∙ALL:
把table所有数据load到memory
∙Column:
指定column数据load到memory
loadtest2all;
loadtest3delta;
loadtest4c1,c2,c3;
∙Unload
把ColumnTable从Memory中卸载出来,下次如果使用此Table系统会自动装载,但装载的过程可能会比较慢
UNLOAD"SYSTEM"."EMP";
∙DropTable
DROPTABLE[]
drop_option:
:
=CASCADE|RESTRICT
Default=RESTRICT
如果指定CASCADE那么相关的object也会被删除:
VIEW,PROCEDURE
级联删除
TABLE-A---VIEW----分析model
∙TruncateTable
TRUNCATETABLE
truncate速度很快,不写log,所以速度快,但不能rollback
对history表也可以用truncate,但是会删除全部信息(main,delta,historymainandhistorydelta)
∙MergeDelta
MERGE[HISTORY]DELTAOF[PARTint_const][WITHPARAMETERS(,)]
PART:
仅仅mergedelta中某一个partition.
MERGEDELTAOFA;
MERGEDELTAOFAPART1;
MERGEHISTORYDELTAOFA;
MERGEHISTORYDELTAOFAPART1;
∙RenameColumn
RENAMECOLUMN.old_column_nameTOnew_column_name
∙RenameTable
RENAMETABLETOnew_table_name
∙UpsertTable/ReplaceTable
插入或更新Table
upsert在HANA中是比较增强的,是根据key来做,但能够修改key的值,所以修改时候,需要注意主键冲突
upserttest2values(9,9)wherec1=5;
UPSERTtest2SELECTC1+1,C2FROMtest2;
ExplainPlan
EXPLAINPLAN[SETSTATEMENT_NAME=]FORSELECT;
select*fromsys.explain_plan_table;
explainplanSETSTATEMENT_NAME='aaa'forselect*from"SYSTEM"."EMP";
如果statement_name不设置的话,在explain_plan_table中statement_name会设置为NULL
EXPLAINPLAN是用于评估SQL执行计划的,执行EXPLAINPLAN之后,从EXPLAIN_PLAN_TABLE这个view中可以查询到相关的执行计划信息
explain_plan_table此View是以SYS.P_QUERYPLANS此Table为基础的
详细关于ExplainPlan参考SQLReferenceManual89页
UserManagement
∙CreateUser
∙需要有UserAmin权限
∙创建
createuseruser_namepasswordtest1234;
∙DropUser
DROPUSERuser_name[];
drop_option:
:
=CASCADE|RESTRICT
∙删除User
dropuseruser_name;
∙默认情况下是RESTRICT,即只有此User下的object都删除了才会删除此Object,如果是使用CASCADE,所有此User下的Object都会自动被删除
∙CreateRole
∙默认创建的user包含有publicrole
∙用户有RoleAmin权限才能create,droprole
∙SAP系统role包括:
modeling,monitoring,public,content_admin
createrolerole_name;
∙DropRole
∙用户有RoleAdmin权限才能droprole
droprolerole_name;
∙CreateSchema
CREATESCHEMAschema_name[OWNEDBYname]
createschemaschema_nameownedbyuser_name;
∙DropSchema
DROPSCHEMAschema_name[]
drop_option:
:
=CASCADE|RESTRICT
DROPSCHEMAschema_name;
∙Grant
∙语法
GRANT,...TO[WITHADMINOPTION]
GRANT