使用李红艳先生开发的luajit插件读取通达信文件lua库,操作步骤如下。
1.准备示例数据
到 https://github.com/mootdx/mootdx 网页下载tests目录下的sh000001.day、sh688001.lc1、sh688001.lc5文件。
wget https://github.com/mootdx/mootdx/archive/refs/heads/master.zip
2.安装luajit插件读取通达信文件lua库, 用luajit_table('tdx', list := '文件名')读取
C:\d>duckdb155
DuckDB v1.5.5 (Variegata)
Enter ".help" for usage hints.
memory D load luajit;
memory D SELECT * FROM luajit_module(mode := 'install', sql_name := 'tdx');
┌─────────┬─────────┬─────────┬──────────────────────────────────────┬──────────────────────────────────────┬──────────┐
│ ok │ mode │ phase │ message │ detail │ sql_name │
│ boolean │ varchar │ varchar │ varchar │ varchar │ varchar │
├─────────┼─────────┼─────────┼──────────────────────────────────────┼──────────────────────────────────────┼──────────┤
│ true │ install │ install │ installed 'tdx' (UDF) --- cached at C: │ luajit_table('tdx') or luajit_s('tdx │ tdx │
│ │ │ │ \Users\lt/.duckdb/luajit-libs/tdx.lu │ ', ...) │ │
│ │ │ │ a │ │ │
└─────────┴─────────┴─────────┴──────────────────────────────────────┴──────────────────────────────────────┴──────────┘
memory D SELECT split_part(val,'|',1) AS datetime,
split_part(val,'|',2)::FLOAT AS open,
split_part(val,'|',3)::FLOAT AS high,
split_part(val,'|',4)::FLOAT AS low,
split_part(val,'|',5)::FLOAT AS close,
split_part(val,'|',6)::BIGINT AS volume,
split_part(val,'|',7)::DOUBLE AS amount
FROM luajit_table('tdx', list := 'sh000001.day') limit 5;
┌────────────┬─────────┬─────────┬─────────┬─────────┬──────────┬───────────────┐
│ datetime │ open │ high │ low │ close │ volume │ amount │
│ varchar │ float │ float │ float │ float │ int64 │ double │
├────────────┼─────────┼─────────┼─────────┼─────────┼──────────┼───────────────┤
│ 2000-02-14 │ 1591.44 │ 1674.13 │ 1587.81 │ 1673.94 │ 43645603 │ 26587693056.0 │
│ 2000-02-15 │ 1709.22 │ 1746.44 │ 1663.0 │ 1670.67 │ 52609049 │ 38936428544.0 │
│ 2000-02-16 │ 1674.93 │ 1695.88 │ 1649.69 │ 1693.1 │ 37505374 │ 36014215168.0 │
│ 2000-02-17 │ 1734.26 │ 1770.88 │ 1615.62 │ 1640.64 │ 51469905 │ 49915342848.0 │
│ 2000-02-18 │ 1623.96 │ 1668.16 │ 1583.58 │ 1668.09 │ 26813271 │ 26994974720.0 │
└────────────┴─────────┴─────────┴─────────┴─────────┴──────────┴───────────────┘
memory D SELECT split_part(val,'|',1) AS datetime,
split_part(val,'|',2)::FLOAT AS open,
split_part(val,'|',3)::FLOAT AS high,
split_part(val,'|',4)::FLOAT AS low,
split_part(val,'|',5)::FLOAT AS close,
split_part(val,'|',6)::BIGINT AS volume,
split_part(val,'|',7)::DOUBLE AS amount
FROM luajit_table('tdx', list := 'sh688001.lc1') limit 5;
┌─────────────────────┬───────┬───────┬───────┬───────┬────────┬──────────┐
│ datetime │ open │ high │ low │ close │ volume │ amount │
│ varchar │ float │ float │ float │ float │ int64 │ double │
├─────────────────────┼───────┼───────┼───────┼───────┼────────┼──────────┤
│ 2021-04-23 09:31:00 │ 36.71 │ 37.02 │ 36.71 │ 36.8 │ 7000 │ 256647.0 │
│ 2021-04-23 09:32:00 │ 36.8 │ 36.8 │ 36.75 │ 36.75 │ 1100 │ 40737.0 │
│ 2021-04-23 09:33:00 │ 36.75 │ 36.75 │ 36.71 │ 36.72 │ 5300 │ 194798.0 │
│ 2021-04-23 09:34:00 │ 36.73 │ 36.73 │ 36.63 │ 36.63 │ 4100 │ 149628.0 │
│ 2021-04-23 09:35:00 │ 36.66 │ 36.66 │ 36.52 │ 36.6 │ 9700 │ 355209.0 │
└─────────────────────┴───────┴───────┴───────┴───────┴────────┴──────────┘
memory D SELECT split_part(val,'|',1) AS datetime,
split_part(val,'|',2)::FLOAT AS open,
split_part(val,'|',3)::FLOAT AS high,
split_part(val,'|',4)::FLOAT AS low,
split_part(val,'|',5)::FLOAT AS close,
split_part(val,'|',6)::BIGINT AS volume,
split_part(val,'|',7)::DOUBLE AS amount
FROM luajit_table('tdx', list := 'sh688001.lc5') limit 5;
┌─────────────────────┬───────┬───────┬───────┬───────┬────────┬───────────┐
│ datetime │ open │ high │ low │ close │ volume │ amount │
│ varchar │ float │ float │ float │ float │ int64 │ double │
├─────────────────────┼───────┼───────┼───────┼───────┼────────┼───────────┤
│ 2021-06-01 09:35:00 │ 37.69 │ 37.69 │ 36.89 │ 36.93 │ 64000 │ 2384077.0 │
│ 2021-06-01 09:40:00 │ 36.96 │ 37.35 │ 36.96 │ 37.35 │ 54600 │ 2026959.0 │
│ 2021-06-01 09:45:00 │ 37.35 │ 37.44 │ 37.27 │ 37.31 │ 27600 │ 1029482.0 │
│ 2021-06-01 09:50:00 │ 37.31 │ 37.4 │ 37.2 │ 37.2 │ 28800 │ 1074137.0 │
│ 2021-06-01 09:55:00 │ 37.23 │ 37.43 │ 37.23 │ 37.36 │ 51500 │ 1926873.0 │
└─────────────────────┴───────┴───────┴───────┴───────┴────────┴───────────┘