select 1 ># e:\122.log ; --把結果寫到e:\122.log
權限分為群組和USER
USER可以在群組內,再針對群組設權限.
授與UserA可以讀取UserB底下的table
要一個一個授與讀取的權限:
grant select on UserB.table_name to UserA;
不分大小寫
字串和數字不會自動轉型 col若是varchar col=123 會找不到資料,要用col='123'
因Sybase為列儲存模式,在執行上INSERT語句會比UPDATE語句慢,尤其表資料越多INSERT效率就越慢;所以在ETL時建議多用UPDATE而不是INSERT
sp_helptext 'sp_'
刪除卡住的連線v1
sp_iqconnection >>誰連上來
sp_iqcontext >>現在什麼語法在跑
sp_iqtransaction >>transation狀態還活著嗎
drop connection $$ConnHandler >>
刪除卡住的連線v2
sp_iqlocks; 檢視當前庫中有那些鎖定
DROP CONNECTION 80174
<drop connection <conn_id>
Q : 查各onwer所占的空間 ?
A : 沒辦法查onwer占的空間,但可以查table占的空間.
IQ空間的最小單位是lock,一個lock為4K
可以透由以下語法查出該table所占的空間
select ownername,tablename,KB = nblocks4, from sp_iqtablesize('ownername.tablename')
所有物件:select name from sysobjects where type='U' order by name
*用者表為type='U',系統表type='S',觸發器為type='TR',存程過程為type='P'
用dba登入,查詢使用者權限
select * from sysuserlist;
--------------DDL-----------------
Sybase中DDL語句不能修改欄位的資料型別
*修改欄位type、欄位型別長度,需要刪除表重建,其餘的不用。
新增註解
COMMENT ON TABLE table_name IS '....';
新增索引
CREATE INDEX index_name ON table_name(column_name);
查詢索引
sp_iqindex table_name='psdss_table',table_owner='psdss_dm'
新增CONSTRAINT
ALTER TABLE tb_name ADD CONSTRAINT pk_name PRIMARY KEY(col_name,..)
刪除CONSTRAINT
ALTER TABLE tb_name DROP CONSTRAINT pk_name;
增加欄位SQL:ALTER TABLE psdss_table ADD (psdss_column NUMERIC(18) NULL);
刪除欄位SQl:ALTER TABLE psdss_table DROP psdss_column;
刪除主鍵約束:ALTER TABLE psdss_table DROP CONSTRAINT pk_name;
增加主鍵約束:ALTER TABLE psdss_table ADD CONSTRAINT pk_name PRIMARY KEY(psdss_column);
修改欄位是否為空:ALTER TABLE psdss_table MODIFY psdss_column NULL;
修改表名:ALTER TABLE psdss_table RENAME new_psdss_table;
修改欄位名:ALTER TABLE psdss_table RENAME psdss_column TO new_psdss_column;
--------------proc---------------------
判斷儲存過程是否存在並刪除:
if exists(
select * from sys.sysprocedure
where proc_name='psdss_table'
) then
DROP PROCEDURE psdss_table
end if;
--------------load table
1.雖然col沒有,但要加filter
2.out最後一行要enter
d:\xxx.out
1234567890
2
3
truncate table xxx;
LOAD TABLE xxx
(
col1 ASCII( 10) NULL('* '),
FILLER(2))
using client file 'd:\xxx.out'
WITH CHECKPOINT ON --也可以設成off
BLOCK FACTOR 10000
NOTIFY 1000
ESCAPES OFF
QUOTES OFF
ON FILE ERROR ROLLBACK
WITH CHECKPOINT ON
表示資料載入完成後執行checkpoint,將cache寫入disk,會需要額外的時間。
而且同一時間checkpoint只能執行一次,如果有多個load table同時完成,也會造成等待。更嚴重的是backup database的過程中不能執行checkpoint,所以這幾十個小時內的load table都無法完成。
強烈建議改成WITH CHECKPOINT OFF,讓系統自動做checkpoint即可。
BLOCK FACTOR
只有當你的檔案來源是磁帶才有意義,不需要設定,維持預設值即可。
NOTIFY 1000
表示成功寫入1000筆資料後就記錄訊息在IQ Server Log,建議可以調高一點,一萬甚至十萬都可以,免得無用的訊息太多。
ESCAPES OFF
它的預設值是ON,但IQ一定要設成OFF才可以。它表示反斜線符號 () 後面的字元,會被認為是特殊字元或一般文字,例如 \n 是換行,或斜線+n。
QUOTES OFF
如果輸入的原始檔案的字串有用引號所包圍,必須把QUOTES設為ON (預設值),否則設為OFF。當QUOTES設為ON時,LOAD TABLE會認為輸入的字串都是被引號所前後包圍。
--------------dbisql
把要執行的query寫在load.sql
把下面這段寫成run.bat
dbisql -c "uid=username; pwd=password; eng=ServerName; links=tcpip(host=128.0.0.1,2640)" -onerror exit -nogui load.sql
把這2個檔案放一起
Sybase 是做資料庫的
2010年被SAP買下來
底下有3大資料管理產品(資料庫)
Adaptive Server Enterprise(ASE)- 企業級RDBMS及Column-oriented DBMS儲存平台
Advantage Database Server (ADS) - 關聯式資料庫管理系統
Sybase IQ - 資料倉庫及 business intelligence RDBMS
Sybase IQ
簡稱IQ
它是資料倉儲,也就是考量資料分析而設計,所以資料撈取效上,會比較好.(比SQL SERVER快)
採用ODBC連線
常用工具:SQLEXEC
安裝驅動程式IQ 16.0
在ODBC先設好,就能透由SQLEXEC做連線.
*32位元限定,ODBC要設在32位元的ODBC
ODBC
如果撈出來的資料有亂碼,可在ODBC上設定字符集為iso_1
增加連線數,可加大c:\mliqt\MLIQ.cfg裡面的 -gm 參數,必需重新啟動IQ才會生效。
更多的concurrent user,代表需要更多的記憶體,一個活動的連線需要10MB記憶體,且load table作業還要250MB記憶體。
所以要考量的是,即使加大了-gm參數,是否仍有足夠的記憶體可同時執行多個load table。
啟動語法
start_iq @C:\MLIQ\MLIQ.cfg C:\MLIQ\MLIQ.db -iqmsgsz 2047 -iqmsgnum 20
*電腦重啟後,記得啟動IQ服務
關閉服務
打開右下角的IQ監控程式,點Shotdown
ref
https://www.ithome.com.tw/node/43551
https://www.itread01.com/content/1546226663.html
https://www.itread01.com/content/1546109287.html
垂直分割(Vertical Architecture)、Bit-Wise Indexing及平行擴充(Multiplex)