拓展语法
Python Parser 在 Python 语法的基础上,拓展了 DolphinDB 特有的编程语言。在 Python Session 中可以无缝调用 DolphinDB 内置函数,SQL 语句以及元代码编程。
SQL 编程
Python Parser 中的 SQL 功能与 DolphinDB 一致,具备分布式计算特性。Python Parser 暂不支持部分语句,见下表。关于各语句的详细介绍,可以参见 SQL语句。
SQL | Python 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 `
字符串标识符的创建方式字符串。