本文介紹在Orca中加載數據的方法。html
1 創建數據庫鏈接python
在Orca中經過connect
函數鏈接到DolphinDB服務器:git
>>> import dolphindb.orca as orca >>> orca.connect(MY_HOST, MY_PORT, MY_USERNAME, MY_PASSWORD)
2 導入數據github
下面的教程使用了一個數據文件:quotes.csv。sql
2.1 read_csv函數數據庫
Orca提供read_csv
函數,用於導入數據集。須要說明的是,Orca的read_csv
函數的engine參數的取值能夠是{‘c’, ‘python’, ‘dolphindb’},且該參數默認取值爲‘dolphindb’。當取值爲‘dolphindb’時,read_csv
函數會在DolphinDB服務器目錄下尋找要導入的數據文件。當取值爲‘python’或‘c’時,read_csv
函數會在python客戶端的目錄下尋找要導入的數據文件。json
請注意,當engine參數設置爲‘python’或者‘c’時,Orca的read_csv
函數至關於調用了pandas的read_csv
函數進行導入。本節是基於engine參數取值爲‘dolphindb’的前提下對Orca的read_csv
函數進行講解。
當engine參數設置爲‘dolphindb’時,Orca的read_csv
函數目前支持的參數以下:api
下面詳細介紹Orca與pandas實現有所不一樣的幾個參數。服務器
Orca在導入csv的時候會自動識別要導入文件的數據類型,支持各類通用時間格式。用戶也能夠經過dtype參數來強制指定數據類型。session
須要說明的是,Orca的read_csv
函數不只支持指定各類numpy的數據類型(np.bool, np.int8, np.float32, etc.),還支持支持以字符串的方式指定DolphinDB的提供的全部數據類型,包括全部時間類型和字符串類型。
例如:
dfcsv = orca.read_csv("DATA_DIR/quotes.csv", dtype={"TIME": "NANOTIMESTAMP", "Exchange": "SYMBOL", "SYMBOL": "SYMBOL", "Bid_Price": np.float64, "Bid_Size": np.int32, "Offer_Price": np.float64, "Offer_Size": np.int32})
bool類型,默認爲True。該參數爲True時,在數據規模達到必定程度時,會將數據導入爲分區內存表,若是設置爲False,會直接將csv導入爲未經分區的DolphinDB普通內存表。
請注意:Orca的分區表與Orca的內存表相比,在操做時也存在許多差別,具體見 Orca分區表的特殊差別。若您的數據量不是很大,且在使用Orca時對Orca與pandas的一致性要求更高,請儘可能不要將數據以分區的方式導入。若您數據量極大,對性能要求極高,則建議您採用分區方式導入數據。
Orca的read_csv
還支持db_handle,table_name和partition_columns這3個參數,這些參數用於在導入數據的時經過指定DolphinDB的數據庫和表等相關信息,將數據導入到DolphinDB的分區表。
DolphinDB支持經過多種方式將數據導入DolphinDB數據庫,Orca在調用read_csv
函數時指定db_handle, table_name以及partition_columns參數,本質上是調用DolphinDB的loadTextEx函數,經過這種方式,咱們能夠直接將數據直接導入DolphinDB的分區表。
2.1.1 導入到內存表
直接調用read_csv
函數,數據會並行導入。因爲採用並行導入,導入速度快,可是對內存佔用是普通表的兩倍。下面的例子中'DATA_DIR'爲數據文件存放的路徑。
>>> DATA_DIR = "dolphindb/database" # e.g. data_dir >>> df = orca.read_csv(DATA_DIR + "/quotes.csv") >>> df.head() # output time Exchange Symbol Bid_Price Bid_Size \ 0 2017-01-01 04:40:11.686699 T AAPL 0.00 0 1 2017-01-01 06:42:50.247631 P AAPL 26.70 10 2 2017-01-01 07:00:12.194786 P AAPL 26.75 5 3 2017-01-01 07:15:03.578071 P AAPL 26.70 10 4 2017-01-01 07:59:39.606882 K AAPL 26.90 1 Offer_Price Offer_Size 0 27.42 1 1 27.47 1 2 27.47 1 3 27.47 1 4 0.00 0
partitioned參數取值爲False,導入爲普通內存表。導入對內存要求低,可是計算速度略低於上面的導入方式:
df = orca.read_csv(DATA_DIR + "/quotes.csv", partitioned=False)
2.1.2 導入到磁盤表
DolphinDB的分區表能夠保存在本地磁盤,也能夠保存在dfs上,磁盤分區表與分佈式表的區別就在於分佈式表的數據庫路徑以"dfs://"開頭,而磁盤分區表的數據庫路徑是本地路徑。
示例
咱們在DolphinDB服務端建立一個磁盤分區表,下面的腳本中,'YOUR_DIR'爲保存磁盤數據庫的路徑:
dbPath=YOUR_DIR + "/demoOnDiskPartitionedDB" login('admin', '123456') if(existsDatabase(dbPath)) dropDatabase(dbPath) db=database(dbPath, RANGE, datehour(2017.01.01 00:00:00+(0..24)*3600))
請注意:以上兩段腳本須要在DolphinDB服務端執行,在Python客戶端中則能夠經過DolphinDB Python API執行腳本。
在Python客戶端中調用Orca的read_csv
函數,指定數據庫db_handle爲磁盤分區數據庫YOUR_DIR + "/demoOnDiskPartitionedDB",指定表名table_name爲"quotes"和進行分區的列partition_columns爲"time",將數據導入到DolphinDB的磁盤分區表,並返回一個表示DolphinDB數據表的對象給df,用於後續計算。
>>> df = orca.read_csv(path=DATA_DIR+"/quotes.csv", dtype={"Exchange": "SYMBOL", "SYMBOL": "SYMBOL"}, db_handle=YOUR_DIR + "/demoOnDiskPartitionedDB", table_name="quotes", partition_columns="time") >>> df # output <'dolphindb.orca.core.frame.DataFrame' object representing a column in a DolphinDB segmented table> >>> df.head() # output time Exchange Symbol Bid_Price Bid_Size \ 0 2017-01-01 04:40:11.686699 T AAPL 0.00 0 1 2017-01-01 06:42:50.247631 P AAPL 26.70 10 2 2017-01-01 07:00:12.194786 P AAPL 26.75 5 3 2017-01-01 07:15:03.578071 P AAPL 26.70 10 4 2017-01-01 07:59:39.606882 K AAPL 26.90 1 Offer_Price Offer_Size 0 27.42 1 1 27.47 1 2 27.47 1 3 27.47 1 4 0.00 0
將上述過程整合成的Python中可執行的腳本以下:
>>> s = orca.default_session() >>> DATA_DIR = "/dolphindb/database" # e.g. data_dir >>> YOUR_DIR = "/dolphindb/database" # e.g. database_dir >>> create_onDiskPartitioned_database = """ dbPath="{YOUR_DIR}" + "/demoOnDiskPartitionedDB" login('admin', '123456') if(existsDatabase(dbPath)) dropDatabase(dbPath) db=database(dbPath, RANGE, datehour(2017.01.01 00:00:00+(0..24)*3600)) """.format(YOUR_DIR=YOUR_DIR) >>> s.run(create_onDiskPartitioned_database) >>> df = orca.read_csv(path=DATA_DIR+"/quotes.csv", dtype={"Exchange": "SYMBOL", "SYMBOL": "SYMBOL"}, db_handle=YOUR_DIR + "/demoOnDiskPartitionedDB", table_name="quotes", partition_columns="time")
上述腳本中,咱們使用的defalut_session
實際上就是經過orca.connect
函數建立的會話,在Python端,咱們能夠經過這個會話與DolphinDB服務端進行交互。關於更多功能,請參見DolphinDB Python API。
請注意:在經過read_csv
函數指定數據庫導入數據以前,須要確保在DolphinDB服務器上已經建立了對應的數據庫。read_csv
函數根據指定的數據庫,表名和分區字段導入數據到DolphinDB數據庫中,若表存在則追加數據,若表不存在則建立表而且導入數據。
2.1.3 導入到分佈式表
read_csv
函數若指定db_handle參數爲dfs數據庫路徑,則數據將直接導入到DolphinDB的dfs數據庫中。
示例
請注意只有啓用enableDFS=1的集羣環境或者DolphinDB單例模式才能使用分佈式表。
與磁盤分區表相似,首先須要在DolphinDB服務器上建立分佈式表,只須要將數據庫路徑改成"dfs://"開頭的字符串便可。
dbPath="dfs://demoDB" login('admin', '123456') if(existsDatabase(dbPath)) dropDatabase(dbPath) db=database(dbPath, RANGE, datehour(2017.01.01 00:00:00+(0..24)*3600))
在Python客戶端中調用Orca的read_csv
函數,指定數據庫db_handle爲分佈式數據庫"dfs://demoDB",指定表名table_name爲"quotes"和進行分區的列partition_columns爲"time",將數據導入到DolphinDB的分佈式表。
>>> df = orca.read_csv(path=DATA_DIR+"/quotes.csv", dtype={"Exchange": "SYMBOL", "SYMBOL": "SYMBOL"}, db_handle="dfs://demoDB", table_name="quotes", partition_columns="time") >>> df # output <'dolphindb.orca.core.frame.DataFrame' object representing a column in a DolphinDB segmented table> >>> df.head() # output time Exchange Symbol Bid_Price Bid_Size \ 0 2017-01-01 04:40:11.686699 T AAPL 0.00 0 1 2017-01-01 06:42:50.247631 P AAPL 26.70 10 2 2017-01-01 07:00:12.194786 P AAPL 26.75 5 3 2017-01-01 07:15:03.578071 P AAPL 26.70 10 4 2017-01-01 07:59:39.606882 K AAPL 26.90 1 Offer_Price Offer_Size 0 27.42 1 1 27.47 1 2 27.47 1 3 27.47 1 4 0.00 0
將上述過程整合成的Python中可執行的腳本以下:
>>> s = orca.default_session() >>> DATA_DIR = "/dolphindb/database" # e.g. data_dir >>> create_dfs_database = """ dbPath="dfs://demoDB" login('admin', '123456') if(existsDatabase(dbPath)) dropDatabase(dbPath) db=database(dbPath, RANGE, datehour(2017.01.01 00:00:00+(0..24)*3600)) """ >>> s.run(create_dfs_database) >>> df = orca.read_csv(path=DATA_DIR+"/quotes.csv", dtype={"Exchange": "SYMBOL", "SYMBOL": "SYMBOL"}, db_handle="dfs://demoDB", table_name="quotes", partition_columns="time")
2.2 read_table函數
Orca提供read_table
函數,經過該函數指定DolphinDB數據庫和表名來加載DolphinDB數據表的數據,能夠用於加載DolphinDB的磁盤表、磁盤分區表和分佈式表。若您已在DolphinDB中建立了數據庫和表,則能夠直接在Orca中調用該函數加載存放在DolphinDB服務端中的數據,read_table
函數支持的參數以下:
加載DolphinDB的磁盤表
read_table
函數能夠用於加載DolphinDB的磁盤表,首先在DolphinDB服務端建立一個本地磁盤表:
>>> s = orca.default_session() >>> YOUR_DIR = "/dolphindb/database" # e.g. database_dir >>> create_onDisk_database=""" saveTable("{YOUR_DIR}"+"/demoOnDiskDB", table(2017.01.01..2017.01.10 as date, rand(10.0,10) as prices), "quotes") """.format(YOUR_DIR=YOUR_DIR) >>> s.run(create_onDisk_database)
經過read_table
函數加載磁盤表:
>>> df = orca.read_table(YOUR_DIR + "/demoOnDiskDB", "quotes") >>> df.head() # output date prices 0 2017-01-01 8.065677 1 2017-01-02 2.969041 2 2017-01-03 3.688191 3 2017-01-04 4.773723 4 2017-01-05 5.567130
請注意: read_table函數要求所要導入的數據庫和表在DolphinDB服務器上已經存在,若只存在數據庫和沒有建立表,則不能將數據成功導入到Python中。
加載DolphinDB的磁盤分區表
對於已經在DolphinDB上建立的數據表,能夠經過read_table函數直接加載。例如,加載2.1.2小節中建立的磁盤分區表:
>>> df = orca.read_table(YOUR_DIR + "/demoOnDiskPartitionedDB", "quotes")
加載DolphinDB的分佈式表
分佈式表一樣能夠經過read_table函數加載。例如,加載2.1.3小節中建立的分佈式表:
>>> df = orca.read_table("dfs://demoDB", "quotes")
2.3 from_pandas函數
Orca提供from_pandas
函數,該函數接受一個pandas的DataFrame做爲參數,返回一個Orca的DataFrame,經過這個方式,Orca能夠直接加載原先存放在pandas的DataFrame中的數據。
>>> import pandas as pd >>> import numpy as np >>> pdf = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), columns=['a', 'b', 'c']) >>> odf = orca.from_pandas(pdf)
3 對其它格式文件的支持
對於其它數據格式的導入,Orca也提供了與pandas相似的接口。這些方法包括:read_pickle
, read_fwf
, read_msgpack
, read_clipboard
, read_excel
, read_json
, json_normalize
,build_table_schema
, read_html
, read_hdf
, read_feather
, read_parquet
, read_sas
, read_sql_table
, read_sql_query
, read_sql
, read_gbq
, read_stata
。