拓展语法

Python Parser 在 Python 语法的基础上,拓展了 DolphinDB 特有的编程语言。在 Python Session 中可以无缝调用 DolphinDB 内置函数,SQL 语句以及元代码编程。

SQL 编程

Python Parser 中的 SQL 功能与 DolphinDB 一致,具备分布式计算特性。Python Parser 暂不支持部分语句,见下表。关于各语句的详细介绍,可以参见 SQL语句

SQLPython Parser
select
create×
alter×
where
any/all×
case×
exec
order by
group by
interval
cgroup by
coalesce×
context by
having
partition
pivot by
update×
insert into×
delete×
drop×
limit
sample
top
map
nullIf×
union/union all×
with×
distinct×
ej
sej
lj(left join)
lsj(left semijoin)
fj(full join)
cj
aj
wj
pwj
pj
inner join
join×
hint 关键字
is null×
between×
exists×
in×
like×

补充说明

  • 调用 DolphinDB 内置函数时,必须调用 toddb() 把 Python 对象转化成 DolphinDB 对象。
  • Python Parser 中除 SQL 外的其它脚本中不允许使用 "a..b" 以及 "a:b"。若需要使用数据对或序列,则可以通过函数 seq 和 pair 来创建。
  • SQL 脚本语言的语法和 DolphinDB 的语法保持一致,可以直接使用 "a:b"。

例子

import dolphindb as ddb
# 建库
dbName="dfs://test"
if existsDatabase(dbName):
	dropDatabase(dbName)

# 调用 DolphinDB 内置函数时,必须调用 toddb() 把 Python 对象转化成 DolphinDB 对象。
db1=database("", ddb.HASH, [ddb.SYMBOL, 10].toddb())
db2=database("", ddb.LIST, ["A"+string(seq(1,10)), "B"+string(seq(1,10)), "C"+string(seq(1,10))].toddb())
db=database(dbName, ddb.COMPO, [db1, db2].toddb())

# 建表
# Python Parser 中除 SQL 外的其它脚本中不允许使用 "a..b" 以及 "a:b"。若需要使用数据对或序列,则可以通过函数函数 seq 和 pair 来创建。
n=20
id=symbol(string(rand(uuid(), n)))
sym=rand(flatten(("A"+string(seq(1,10)), "B"+string(seq(1,10)), "C"+string(seq(1,10))).toddb()), n)
qty=rand(100, n)
t=table(id, sym, qty)

pt=db.createPartitionedTable(t, `pt, [`id, `sym].toddb()).append!(t)

# 查询
# SQL 脚本语言的语法和 DolphinDB 的语法保持一致,可以直接使用 "a:b"。
select top 0:5 * from pt where sym like "A%"

# output:
id	sym	qty
7cd8359b-e1f4-b8b0-a0e5-6f0c6e971132	A3	84
b3aafacc-525e-3459-252d-4a3b63bfc994	A9	82
96252fcb-80ec-4272-5113-205eb02dee87	A9	96
3816fa58-94a7-97c0-170a-9f9e79594567	A9	85
a12e999c-5c5b-a392-3865-3384b823f583	A3	45
114cd225-2ff5-25f5-98ce-84e4253215e5	A2	77

元编程

DolphinDB 元代码用于生成动态的表达式,其由一对尖括号 “<>” 来包裹对象或表达式。

Python Parser 中的元代码编写规则和 DolphinDB 保持一致,但部分语法存在差异,例如:Python Parser 暂不支持 DolphinDB 特有的语法,如 "1 2 3", "a:b", "a..b", "func [1,2,3]"等。

eval(<1 + 3>)
# output:4

sqlColAlias(<avg(PRC)>, `avgPRC)
# output: < avg(PRC) as avgPRC >

n=20
id=symbol(string(rand(uuid(), n)))
sym=rand(flatten(("A"+string(seq(1,10)), "B"+string(seq(1,10)), "C"+string(seq(1,10))).toddb()), n)
qty=rand(100, n)
t=table(id, sym, qty)
sql(select=sqlCol("*"), from=t, groupBy=sqlCol(`sym), groupFlag=0, limit=1)
# output: < select top 1 * from tf0746a0500000000 context by sym >

参考:元编程

timer 语句

支持使用 timer(n): 计算 Python Parser 代码运行时间,其中 n 代表执行次数。

def fib(n):
    xs = []
    a, b = 0, 1
    while a < n:
        xs.append(a)
        a, b = b, a + b
	return xs
timer(1000): fib(2000)
# output: Time elapsed: 108.709 ms

参考:timer 语句

字符串创建方式扩展

在 Python Parser 中,可以通过 Python 的方式创建字符串,也可以通过使用 DolphinDB ` 字符串标识符的创建方式字符串。