通联历史数据如何自动化导入 DolphinDB

news2025/1/11 17:52:57

在部署完 DolphinDB 后,需要将历史数据批量导入数据库,再进行数据查询、计算和分析等操作。为便于用户快速导入通联历史 Level-2 行情数据,DolphinDB 开发了 DolphinDBModules::easyTLDataImport 模块(简称 easyTLDataImport 模块),主要用于通联历史 Level-2 行情数据的自动化导入,目前已支持的数据源包括:

  • 沪深 Level-2 快照行情
  • 沪深逐笔委托
  • 沪深逐笔成交

注意:本教程代码基于 DolphinDB 2.00.9.4 开发,建议用户使用 2.00.9.4 及以上版本进行功能测试。

1. 历史数据文件结构

在使用本教程功能模块时,需要用户自行将通联数据解压,并确保在主目录下创建了以日期命名的日期目录,每个日期目录下包含所有该日期的 csv 文件。

例如,主目录是 level2,则文件结构可以设置如下:

|—— level2

|      |—— 20211201

|      |      |—— xxx.csv

|      |      |—— …

|      |—— 20211202

|      |      |—— xxx.csv

|      |      |—— …

|      |—— …

数据也可以按年组织,则文件结构如下

|—— level2

|      |—— 2021

|      |      |—— 20211201

|      |      |      |—— xxx.csv

|      |      |      |—— …

|      |      |—— …

|      |—— 2022

|      |      |—— 20221201

|      |      |      |—— xxx.csv

|      |      |      |—— …

|      |      |—— …

|      |—— …

注意:日期这一层目录之前的文件结构和日期目录下的文件结构都没有要求。

2. 行情数据存储模型设计

通联数据提供了上交所和深交所两个交易所的数据。用户使用 easyTLDataImport 模块时可以选择将两个交易所的数据分开存储为两张表,或合并存为一张表。如果选择存为一张表,则表中的字段是两个交易所数据字段的并集,并新增字段 Market 用于标识数据来自哪个交易所。

上交所和深交所两个交易所数据的结构不同,且不同时期同一个交易所的数据结构也不同。根据《沪深 L2 高频行情文件说明》,我们整理了通联提供的两个交易所各个时期的数据结构,最终确定以下述的表结构将数据存入数据库。

2.1 Level-2 快照数据

  • 深交所数据(总共 37 列)
字段含义入库字段名入库数据类型2010.05 - 2016.05.06
(MarketData.csv)
2016.05.07 - 2019.06.04
(mdl_6_28_0.csv)
2019.06.05 - 至今
(mdl_6_28_0.csv)
数据生成时间TradeTimeTIMESTAMPDataTimeStampUpdateTimeUpdateTime
行情类别MDStreamIDSYMBOLMDStreamIDMDStreamID
证券代码SecurityIDSYMBOLSecurityIDSecurityIDSecurityID
证券代码源SecurityIDSourceSYMBOLSecurityIDSourceSecurityIDSource
交易阶段TradingPhaseCodeSYMBOLEndOfDayMakerTradingPhaseCodeTradingPhaseCode
昨日收盘价PreCloPriceDOUBLEPreClosePxPreCloPricePreCloPrice
成交笔数NumTradesINTNumTradesTurnNumTurnNum
成交总量TotalVolumeTradeINTTotalVolumeTradeVolumeVolume
成交总金额TotalValueTradeDOUBLETotalValueTradeTurnoverTurnover
最近价LastPriceDOUBLELastPxLastPriceLastPrice
开盘价OpenPriceDOUBLEOpenPxOpenPriceOpenPrice
最高价HighPriceDOUBLEHighPxHighPriceHighPrice
最低价LowPriceDOUBLELowPxLowPriceLowPrice
升跌1(最新价-昨收价)DifPrice1DOUBLEDifPrice1DifPrice1
升跌2(最新价-上一最新价)DifPrice2DOUBLEDifPrice2DifPrice2
股票市盈率1PE1DOUBLEPERatio1PE1PE1
股票市盈率2PE2DOUBLEPERatio2PE2PE2
基金T-1净值PreCloseIOPVDOUBLEPreCloseIOPVPreCloseIOPV
基金实时参考净值IOPVDOUBLEIOPVIOPV
委托买入总量TotalBidQtyINTTotalBidQtyTotalBidQtyTotalBidQty
加权平均买入价格WeightedAvgBidPxDOUBLEWeightedAvgBidPxWeightedAvgBidPxWeightedAvgBidPx
委托卖出总量TotalOfferQtyINTTotalOfferQtyTotalOfferQtyTotalOfferQty
加权平均卖出价格WeightedAvgOfferPxDOUBLEWeightedAvgOfferPxWeightedAvgOfferPxWeightedAvgOfferPx
涨停价UpLimitPxDOUBLEHighLimitPriceHighLimitPrice
跌停价DownLimitPxDOUBLELowLimitPriceLowLimitPrice
持仓量OpenIntINTTotalLongPositionOpenIntOpenInt
权证溢价率OptPremiumRatioDOUBLEOptPremiumRatioOptPremiumRatio
卖价10档OfferPriceDOUBLE[]AskPrice1..AskPrice10AskPrice1..AskPrice10AskPrice1..AskPrice10
买价10档BidPriceDOUBLE[]BidPrice1..BidPrice10BidPrice1..BidPrice10BidPrice1..BidPrice10
卖量10档OfferOrderQtyINT[]AskVolume1..AskVolume10AskVolume1..AskVolume10AskVolume1..AskVolume10
买量10档BidOrderQtyINT[]BidVolume1..BidVolume10BidVolume1..BidVolume10BidVolume1..BidVolume10
申买10档委托笔数BidNumOrdersINT[]NumOrdersB1..NumOrdersB10
申卖10档委托笔数OfferNumOrdersINT[]NumOrdersS1..NumOrdersS10
入库时间LocalTimeTIMELocalTimeLocalTimeLocalTime
消息序列号SeqNoINTSeqNoSeqNoSeqNo
委托卖量50档OfferOrdersINT[]OrderQty1..OrderQty50 (OrderQueue.csv)OrderQty1..OrderQty50 (mdl_6_28_1.csv)OrderQty1..OrderQty50 (mdl_6_28_1.csv)
委托买量50档BidOrdersINT[]OrderQty1..OrderQty50 (OrderQueue.csv)OrderQty1..OrderQty50 (mdl_6_28_2.csv)OrderQty1..OrderQty50 (mdl_6_28_2.csv)
  • 上交所数据(总共 52 列)
字段含义入库字段名入库数据类型2019.06.05 以前
(MarketData.csv)
2019.06.06 - 至今
(MarketData.csv)
数据生成时间TradeTimeTIMESTAMPUpdateTimeUpdateTime
证券代码SecurityIDSYMBOLSecurityIDSecurityID
快照类型(全量/更新)ImageStatusINTImageStatusImageStatus
昨日收盘价PreCloPriceDOUBLEPreCloPricePreCloPrice
开盘价OpenPriceDOUBLEOpenPriceOpenPrice
最高价HighPriceDOUBLEHighPriceHighPrice
最低价LowPriceDOUBLELowPriceLowPrice
最近价LastPriceDOUBLELastPriceLastPrice
今收盘价ClosePriceDOUBLEClosePriceClosePrice
交易阶段TradingPhaseCodeSYMBOLInstruStatusInstruStatus
成交笔数NumTradesINTTradNumberTradNumber
成交总量TotalVolumeTradeINTTradVolumeTradVolume
成交总金额TotalValueTradeDOUBLETurnoverTurnover
委托买入总量TotalBidQtyINTTotalBidVoTotalBidVo
加权平均买入价格WeightedAvgBidPxDOUBLEWAvgBidPriWAvgBidPri
债券加权平均委买价格AltWAvgBidPriDOUBLEAltWAvgBidPriAltWAvgBidPri
委托卖出总量TotalOfferQtyINTTotalAskVolTotalAskVol
加权平均卖出价格WeightedAvgOfferPxDOUBLEWAvgAskPriWAvgAskPri
债券加权平均委卖价格AltWAvgAskPriDOUBLEAltWAvgAskPriAltWAvgAskPri
ETF申购笔数ETFBuyNumberINTETFBuyNumberETFBuyNumber
ETF申购数量ETFBuyAmountINTEtfBuyVolumeEtfBuyVolume
ETF申购金额ETFBuyMoneyDOUBLEETFBuyMoneyETFBuyMoney
ETF赎回笔数ETFSellNumberINTETFSellNumberETFSellNumber
ETF赎回数量ETFSellAmountINTETFSellVolumeETFSellVolume
ETF赎回金额ETFSellMoneyDOUBLEETFSellMoneyETFSellMoney
债券到期收益率YieldToMatuDOUBLEYieldToMatuYieldToMatu
权证执行的总数量TotWarExNumDOUBLETotWarExNumTotWarExNum
涨停价UpLimitPxDOUBLEWarUpperPriWarUpperPri
跌停价DownLimitPxDOUBLEWarLowerPriWarLowerPri
买入撤单笔数WithdrawBuyNumberINTWiDBuyNumWiDBuyNum
买入撤单数量WithdrawBuyAmountINTWiDBuyVoWiDBuyVo
买入撤单金额WithdrawBuyMoneyDOUBLEWiDBuyMonWiDBuyMon
卖出撤单笔数WithdrawSellNumberINTWiDSellNumWiDSellNum
卖出撤单数量WithdrawSellAmountINTWiDSellVolWiDSellVol
卖出撤单金额WithdrawSellMoneyDOUBLEWiDSellMonWiDSellMon
买入总笔数TotalBidNumberINTTotBidNumTotBidNum
卖出总笔数TotalOfferNumberINTTotSellNumTotSellNum
买入委托成交最大等待时间MaxBidDurINTMaxBidDurMaxBidDur
卖出委托最大等待时间MaxSellDurINTMaxSellDurMaxSellDur
买方委托价位数BidNumINTBidNumBidNum
卖方委托价位数SellNumINTSellNumSellNum
基金实时参考净值IOPVDOUBLEIOPVIOPV
卖价10档OfferPriceDOUBLE[]AskPrice1..AskPrice10AskPrice1..AskPrice10
买价10档BidPriceDOUBLE[]BidPrice1..BidPrice10BidPrice1..BidPrice10
卖量10档OfferOrderQtyINT[]AskVolume1..AskVolume10AskVolume1..AskVolume10
买量10档BidOrderQtyINT[]BidVolume1..BidVolume10BidVolume1..BidVolume10
申买10档委托笔数BidNumOrdersINT[]NumOrdersB1..NumOrdersB10
申卖10档委托笔数OfferNumOrdersINT[]NumOrdersS1..NumOrdersS10
入库时间LocalTimeTIMELocalTimeLocalTime
消息序列号SeqNoINTSeqNoSeqNo
委托卖量50档OfferOrdersINT[]OrderQty1..OrderQty50 (OrderQueue.csv)OrderQty1..OrderQty50 (OrderQueue.csv)
委托买量50档BidOrdersINT[]OrderQty1..OrderQty50 (OrderQueue.csv)OrderQty1..OrderQty50 (OrderQueue.csv)
  • 沪深数据合并(总共 62 列)
字段含义入库字段名入库数据类型深交所 2010.05 - 2016.05.06
(MarketData.csv)
深交所 2016.05.07 - 2019.06.04
(mdl_6_28_0.csv)
深交所 2019.06.05 - 至今
(mdl_6_28_0.csv)
上交所 2019.06.05 以前
(MarketData.csv)
上交所 2019.06.06 - 至今
(MarketData.csv)
交易所名称MarketSYMBOL“SZ““SZ““SZ““SH““SH“
数据生成时间TradeTimeTIMESTAMPDataTimeStampUpdateTimeUpdateTimeUpdateTimeUpdateTime
行情类别MDStreamIDSYMBOLMDStreamIDMDStreamID
证券代码SecurityIDSYMBOLSecurityIDSecurityIDSecurityIDSecurityIDSecurityID
证券代码源SecurityIDSourceSYMBOLSecurityIDSourceSecurityIDSource
交易阶段TradingPhaseCodeSYMBOLEndOfDayMakerTradingPhaseCodeTradingPhaseCodeInstruStatusInstruStatus
快照类型(全量/更新)ImageStatusINTImageStatusImageStatus
昨日收盘价PreCloPriceDOUBLEPreClosePxPreCloPricePreCloPricePreCloPricePreCloPrice
成交笔数NumTradesINTNumTradesTurnNumTurnNumTradNumberTradNumber
成交总量TotalVolumeTradeINTTotalVolumeTradeVolumeVolumeTradVolumeTradVolume
成交总金额TotalValueTradeDOUBLETotalValueTradeTurnoverTurnoverTurnoverTurnover
最近价LastPriceDOUBLELastPxLastPriceLastPriceLastPriceLastPrice
开盘价OpenPriceDOUBLEOpenPxOpenPriceOpenPriceOpenPriceOpenPrice
最高价HighPriceDOUBLEHighPxHighPriceHighPriceHighPriceHighPrice
最低价LowPriceDOUBLELowPxLowPriceLowPriceLowPriceLowPrice
今收盘价ClosePriceDOUBLEClosePriceClosePrice
升跌1(最新价-昨收价)DifPrice1DOUBLEDifPrice1DifPrice1
升跌2(最新价-上一最新价)DifPrice2DOUBLEDifPrice2DifPrice2
股票市盈率1PE1DOUBLEPERatio1PE1PE1
股票市盈率2PE2DOUBLEPERatio2PE2PE2
基金T-1净值PreCloseIOPVDOUBLEPreCloseIOPVPreCloseIOPV
基金实时参考净值IOPVDOUBLEIOPVIOPVIOPVIOPV
委托买入总量TotalBidQtyINTTotalBidQtyTotalBidQtyTotalBidQtyTotalBidVoTotalBidVo
加权平均买入价格WeightedAvgBidPxDOUBLEWeightedAvgBidPxWeightedAvgBidPxWeightedAvgBidPxWAvgBidPriWAvgBidPri
债券加权平均委买价格AltWAvgBidPriDOUBLEAltWAvgBidPriAltWAvgBidPri
委托卖出总量TotalOfferQtyINTTotalOfferQtyTotalOfferQtyTotalOfferQtyTotalAskVolTotalAskVol
加权平均卖出价格WeightedAvgOfferPxDOUBLEWeightedAvgOfferPxWeightedAvgOfferPxWeightedAvgOfferPxWAvgAskPriWAvgAskPri
债券加权平均委卖价格AltWAvgAskPriDOUBLEAltWAvgAskPriAltWAvgAskPri
涨停价UpLimitPxDOUBLEHighLimitPriceHighLimitPriceWarUpperPriWarUpperPri
跌停价DownLimitPxDOUBLELowLimitPriceLowLimitPriceWarLowerPriWarLowerPri
持仓量OpenIntINTTotalLongPositionOpenIntOpenInt
权证溢价率OptPremiumRatioDOUBLEOptPremiumRatioOptPremiumRatio
卖价10档OfferPriceDOUBLE[]AskPrice1..AskPrice10AskPrice1..AskPrice10AskPrice1..AskPrice10AskPrice1..AskPrice10AskPrice1..AskPrice10
买价10档BidPriceDOUBLE[]BidPrice1..BidPrice10BidPrice1..BidPrice10BidPrice1..BidPrice10BidPrice1..BidPrice10BidPrice1..BidPrice10
卖量10档OfferOrderQtyINT[]AskVolume1..AskVolume10AskVolume1..AskVolume10AskVolume1..AskVolume10AskVolume1..AskVolume10AskVolume1..AskVolume10
买量10档BidOrderQtyINT[]BidVolume1..BidVolume10BidVolume1..BidVolume10BidVolume1..BidVolume10BidVolume1..BidVolume10BidVolume1..BidVolume10
申买10档委托笔数BidNumOrdersINT[]NumOrdersB1..NumOrdersB10NumOrdersB1..NumOrdersB10
申卖10档委托笔数OfferNumOrdersINT[]NumOrdersS1..NumOrdersS10NumOrdersS1..NumOrdersS10
ETF申购笔数ETFBuyNumberINTETFBuyNumberETFBuyNumber
ETF申购数量ETFBuyAmountINTEtfBuyVolumeEtfBuyVolume
ETF申购金额ETFBuyMoneyDOUBLEETFBuyMoneyETFBuyMoney
ETF赎回笔数ETFSellNumberINTETFSellNumberETFSellNumber
ETF赎回数量ETFSellAmountINTETFSellVolumeETFSellVolume
ETF赎回金额ETFSellMoneyDOUBLEETFSellMoneyETFSellMoney
债券到期收益率YieldToMatuDOUBLEYieldToMatuYieldToMatu
权证执行的总数量TotWarExNumDOUBLETotWarExNumTotWarExNum
买入撤单笔数WithdrawBuyNumberINTWiDBuyNumWiDBuyNum
买入撤单数量WithdrawBuyAmountINTWiDBuyVoWiDBuyVo
买入撤单金额WithdrawBuyMoneyDOUBLEWiDBuyMonWiDBuyMon
卖出撤单笔数WithdrawSellNumberINTWiDSellNumWiDSellNum
卖出撤单数量WithdrawSellAmountINTWiDSellVolWiDSellVol
卖出撤单金额WithdrawSellMoneyDOUBLEWiDSellMonWiDSellMon
买入总笔数TotalBidNumberINTTotBidNumTotBidNum
卖出总笔数TotalOfferNumberINTTotSellNumTotSellNum
买入委托成交最大等待时间MaxBidDurINTMaxBidDurMaxBidDur
卖出委托最大等待时间MaxSellDurINTMaxSellDurMaxSellDur
买方委托价位数BidNumINTBidNumBidNum
卖方委托价位数SellNumINTSellNumSellNum
入库时间LocalTimeTIMELocalTimeLocalTimeLocalTimeLocalTimeLocalTime
消息序列号SeqNoINTSeqNoSeqNoSeqNoSeqNoSeqNo
委托卖量50档OfferOrdersINT[]OrderQty1..OrderQty50
(OrderQueue.csv)
OrderQty1..OrderQty50
(mdl_6_28_1.csv)
OrderQty1..OrderQty50
(mdl_6_28_1.csv)
OrderQty1..OrderQty50
(OrderQueue.csv)
OrderQty1..OrderQty50
(OrderQueue.csv)
委托买量50档BidOrdersINT[]OrderQty1..OrderQty50
(OrderQueue.csv)
OrderQty1..OrderQty50
(mdl_6_28_2.csv)
OrderQty1..OrderQty50
(mdl_6_28_2.csv)
OrderQty1..OrderQty50
(OrderQueue.csv)
OrderQty1..OrderQty50
(OrderQueue.csv)

2.2 逐笔委托数据

  • 深交所数据(总共 12 列)
字段含义入库字段名入库数据类型2012.10 - 2016.05.06
(Order.csv)
2016.05.07 - 至今
(mdl_6_33_0.csv)
频道代码ChannelNoINTSetNoChannelNo
委托索引ApplSeqNumLONGRecNoApplSeqNum
行情类别MDStreamIDSYMBOLMDStreamID
证券代码SecurityIDSYMBOLSecurityIDSecurityID
证券代码源SecurityIDSourceSYMBOLSecurityIDSource
委托价格PriceDOUBLEPricePrice
委托数量OrderQtyINTOrderQtyOrderQty
买卖方向SideSYMBOLFunctionCodeSide
报价时间TradeTimeTIMESTAMPOrderEntryTimeTransactTime
委托类别OrderTypeSYMBOLOrderKindOrdType
入库时间LocalTimeTIMELocalTimeLocalTime
接收序列号SeqNoLONGSeqNoSeqNo
  • 上交所数据(总共 13 列)
字段含义入库字段名入库数据类型2021.06.07 - 至今
(mdl_4_19_0.csv)
数据状态DataStatusINTDataStatus
委托序号ApplSeqNumLONGOrderIndex
频道代码ChannelNoINTOrderChannel
证券代码SecurityIDSYMBOLSecurityID
委托时间TradeTimeTIMESTAMPOrderTime
订单类型OrderTypeSYMBOLOrderType
原始订单号OrderNOINTOrderNO
委托价格PriceDOUBLEOrderPrice
委托数量OrderQtyINTBalance
委托标识SideSYMBOLOrderBSFlag
业务序列号BizIndexLONGBizIndex
入库时间LocalTimeTIMELocalTime
接收序列号SeqNoLONGSeqNo
  • 沪深数据合并(总共 16 列)
字段含义入库字段名入库数据类型深交所 2012.10 - 2016.05.06
(Order.csv)
深交所 2016.05.07 - 至今
(mdl_6_33_0.csv)
上交所 2021.06.07 - 至今
(mdl_4_19_0.csv)
频道代码ChannelNoINTSetNoChannelNoOrderChannel
委托索引ApplSeqNumLONGRecNoApplSeqNumOrderIndex
行情类别MDStreamIDSYMBOLMDStreamID
证券代码SecurityIDSYMBOLSecurityIDSecurityIDSecurityID
证券代码源SecurityIDSourceSYMBOLSecurityIDSource
委托价格PriceDOUBLEPricePriceOrderPrice
委托数量OrderQtyINTOrderQtyOrderQtyBalance
买卖方向SideSYMBOLFunctionCodeSideOrderBSFlag
报价时间TradeTimeTIMESTAMPOrderEntryTimeTransactTimeOrderTime
委托类别OrderTypeSYMBOLOrderKindOrdTypeOrderType
入库时间LocalTimeTIMELocalTimeLocalTimeLocalTime
接收序列号SeqNoLONGSeqNoSeqNoSeqNo
委托订单号OrderNOINTOrderNO
数据状态DataStatusINTDataStatus
业务序列号BizIndexLONGBizIndex
交易所名称MarketSYMBOL“SZ““SZ““SH“

2.3 逐笔成交数据

  • 深交所数据(总共 14 列)
字段含义入库字段名入库数据类型2010.05 - 2016.05.06
(Trade.csv)
2016.05.07 - 至今
(mdl_6_36_0.csv)
频道代码ChannelNoINTSetNoChannelNo
消息记录号ApplSeqNumLONGRecNoApplSeqNum
行情类别MDStreamIDSYMBOLMDStreamID
买方委托索引BidApplSeqNumLONGBuyOrderRecNoBidApplSeqNum
卖方委托索引OfferApplSeqNumLONGSellOrderRecNoOfferApplSeqNum
证券代码SecurityIDSYMBOLSecurityIDSecurityID
证券代码源SecurityIDSourceSYMBOLSecurityIDSource
委托价格TradPriceDOUBLEPriceLastPx
委托数量TradeQtyDOUBLETradeQtyLastQty
成交代码ExecTypeSYMBOLFunctionCodeExecType
成交时间TradeTimeTIMESTAMPTradeTimeTransactTime
接收时间戳LocalTimeTIMELocalTimeLocalTime
接收序列号SeqNoLONGSeqNoSeqNo
成交类别OrderKindSYMBOLOrderKind
  • 上交所数据(总共 14 列)
字段含义入库字段名入库数据类型2021.04.25 以前
(Transaction.csv)
2021.04.26 - 至今
(Transaction.csv)
数据状态DataStatusINTDataStatusDataStatus
消息记录号ApplSeqNumLONGTradeIndexTradeIndex
频道代码ChannelNoINTTradeChanTradeChan
证券代码SecurityIDSYMBOLSecurityIDSecurityID
成交时间TradeTimeTIMESTAMPTradTimeTradTime
委托价格TradPriceDOUBLETradPriceTradPrice
委托数量TradeQtyDOUBLETradVolumeTradVolume
成交金额TradeMoneyDOUBLETradeMoneyTradeMoney
买方委托索引BidApplSeqNumLONGTradeBuyNoTradeBuyNo
卖方委托索引OfferApplSeqNumLONGTradeSellNoTradeSellNo
内外盘标志TradeBSFlagSYMBOLTradeBSFlagTradeBSFlag
业务序列号BizIndexLONGBizIndex
接收时间戳LocalTimeTIMELocalTimeLocalTime
接收序列号SeqNoLONGSeqNoSeqNo
  • 沪深数据合并(总共 19 列)
字段含义入库字段名入库数据类型深交所 2010.05 - 2016.05.06
(Trade.csv)
2016.05.07 - 至今
(mdl_6_36_0.csv)
上交所 2021.04.25 以前
(Transaction.csv)
2021.04.26 - 至今
(Transaction.csv)
频道代码ChannelNoINTSetNoChannelNoTradeChanTradeChan
消息记录号ApplSeqNumLONGRecNoApplSeqNumTradeIndexTradeIndex
行情类别MDStreamIDSYMBOLMDStreamID
买方委托索引BidApplSeqNumLONGBuyOrderRecNoBidApplSeqNumTradeBuyNoTradeBuyNo
卖方委托索引OfferApplSeqNumLONGSellOrderRecNoOfferApplSeqNumTradeSellNoTradeSellNo
证券代码SecurityIDSYMBOLSecurityIDSecurityIDSecurityIDSecurityID
证券代码源SecurityIDSourceSYMBOLSecurityIDSource
委托价格TradPriceDOUBLEPriceLastPxTradPriceTradPrice
委托数量TradeQtyDOUBLETradeQtyLastQtyTradVolumeTradVolume
成交代码ExecTypeSYMBOLFunctionCodeExecType
成交时间TradeTimeTIMESTAMPTradeTimeTransactTimeTradTimeTradTime
接收时间戳LocalTimeTIMELocalTimeLocalTimeLocalTimeLocalTime
接收序列号SeqNoLONGSeqNoSeqNoSeqNoSeqNo
数据状态DataStatusINTDataStatusDataStatus
成交金额TradeMoneyDOUBLETradeMoneyTradeMoney
内外盘标志TradeBSFlagSYMBOLTradeBSFlagTradeBSFlag
业务序列号BizIndexLONGBizIndex
成交类别OrderKindSYMBOLOrderKind
交易所名称MarketSYMBOL“SZ““SZ““SH““SH“

2.4 去重方案

  • 为避免重复提交任务或重复导入数据每次导入前,应将库内已有的对应日期的数据删除
  • 为避免当天数据中存在重复,将当天市场所有数据(一个大 csv)读入内存,使用 isDuplicated([...], LAST) 函数进行去重后再导入数据库
数据源isDuplicated 去重字段
Level-2 快照行情TradeTime, SecurityID, ImageStatus
逐笔委托ChannelNo, ApplSeqNum
逐笔快照ChannelNo, ApplSeqNum

3. 模块介绍

easyTLDataImport 模块主要包含数据表结构数据库和分区表创建数据导入三部分。

3.1 数据表结构

tbSchema 文件夹下的模块是根据本文第二章节中的合并规则整理的数据结构。该文件夹包含以 CsvSchema.dos 和 CsvSchema.dos 结尾的两种模块文件,作用如下:

  • CsvSchema.dos 用于指定 DolphinDB 读取 csv 文件时的数据格式
  • Schema.dos 用于指定数据存入数据库的数据格式

3.2 数据库和分区表创建

数据库和分区表创建包括两个模块文件:createDB.dos 和 createTB.dos

  • createDB.dos 用于创建存储通联数据的数据库
  • createTB.dos 用于创建存储通联数据的分布式表

基于客户的实践经验,确定了如下的分区方案:

沪深是否分开存储分区方案分区列排序列
沪深分开存储时间维度按天分区 + 证券代码维度 HASH 25 分区TradeTime 和 SecurityIDSecurityID + TradeTime
沪深合并存储时间维度按天分区 + 证券代码维度 HASH 50 分区TradeTime 和 SecurityIDMarket+SecurityID+TradeTime

3.3 数据导入

数据导入部分包含 loadOneDayData 文件夹和 loadTLData.dos,作用如下:

  • loadOneDayData 包含了 loadOneDaySnapshot.dos 、loadOneDayEntrust.dosloadOneDayTrade.dos 三个模块文件,分别用于导入通联一天的行情快照、逐笔委托和逐笔成交数据。
  • loadTLData.dos 用于导入指定目录下的所有通联数据,是对前面所有模块的整合。在应用层面,用户只需要了解该模块中的主要函数即可。

下面列出 loadTLData.dos 模块中的主要函数。

3.3.1 autoLoadTongLianData

语法

autoLoadTongLianData(fileDir, dataSource, dbName="dfs://TL_Level2", tableName=NULL, market="ALL", startDate=NULL, endDate=NULL, parallel=1, initialDB=false, initialTB=false)

参数

  • fileDir 指定的存放数据的路径,该目录下必须有一层目录是形如 “20221201” 的日期。
  • dataSource 数据源,只能 “TLSnapshot”, “TLEntrsut“, “TLTrade“ 三选一
  • dbName 数据库名称,默认 ”dfs://TL_Level2“
  • tableName 分布式表名称,如果用户没有额外指定表名,则默认表名 “snapshot“, “entrust“, “trade“
  • market 交易所,目前只能 “ALL“, ”SZ“, ”SH“ 三选一。当 market=”ALL” 时,会将沪深的数据全部导入一张名为 tableName 的分布式表;否则,会以分开存储的形式创建名为 tableName+market 的一张分布表(比如 ”snapshotSZ“)并只导入 market 一个交易所的数据。
  • startDate 字符串,导入数据的起始日期,比如 “20220101”(包括这一天)。若 startDate=NULL,则对起始日期不做判断。
  • endDate 字符串,导入数据的结束日期,比如 “20221231”(包括这一天)。若 endDate=NULL,则对结束日期不做判断。
  • parallel 并行度,控制后台提交的任务数目
  • initialDB 一个布尔值,是否需要初始化数据库。如果已经存在名为 dbName 的数据库,当 initialDB=true 时,会删除原来的数据库并重新创建;否则会保留原来的数据库并输出 "[dbName] 数据库已经存在" 的提示
  • initialTB 一个布尔值,是否需要初始化分布式表。如果在 dbName 数据库下已经存在名为 tbName 的表,当 initialTB=true 时,会删除原来的表并重新创建;否则会保留原来的表并输出 "数据库 [dbName] 已经存在表 [tbName]" 的提示。

详情

将 fileDir 路径下从 startDate 到 endDate 日期的 dataSource 数据导入 dbName 数据库中的 tableName 表里

3.3.2 getJobStatus

语法

getJobStatus(jobid)

参数

jobid 后台任务描述

详情

查询后台任务中任务描述为 jobid 的任务状态

3.3.3 getJobDetails

语法

getJobDetails(jobid)

参数

jobid 后台任务描述

详情

输出后台任务中任务描述为 jobid 的中间信息

4. 异常处理

对于导入过程中可能出现的问题,会在日志中输出对应的报错提示信息。

异常情况输出信息
创建数据库时,名为 dbName 的数据库已经存在且 initialDB=false{"code": "warning","message": "[dbName] 数据库已经存在"}
创建分布式表时,名为 tableName 的表已经存在且 initialDB=false{"code": "warning","message": "数据库 [dbName] 已经存在表 [tableName]"}
数据导入时,fileDir 目录下没有形如 “20221201” 的文件夹{"code": "warning","message": "[fileDir] 路径下没有找到指定日期的文件夹,请确认文件路径"}
数据导入时,dataSource 不是 "TLSnapshot", "TLEntrust", "TLTrade" 三者之一{"code": "error","message": "数据源 [dataSource] 暂时不支持"}
数据导入时,market 不属于 “ALL“, ”SZ“, ”SH“{"code": "error","message": "市场 [market] 暂时不支持"}
数据导入时,startDate 和 endDate 不是 NULL 或者形如 “20220101” 的字符串{"code": "error","message": "开始日期 [startDate] 格式有误"}
{"code": "error","message": "结束日期 [endDate] 格式有误"}
实际 csv 文件的数据列数和 CsvSchema.dos 模块里面预设的表结构的列数不一致{"code": "error","message": "[csvPath] 的数据格式有误,列数不匹配"}
日期文件夹下,没有对应的 csv 文件{"code": "error","message": "深交所 [day] 日期的 [csvNames] 的 csv 文件不全或者不存在"}
{"code": "error","message": "上交所 [day] 日期的 [csvNames] 的 csv 文件不全或者不存在"}
其他错误【通过 try{}catch(ex){} 捕获异常】{"code": "error","message": 输出报错信息 ex}

5. 使用示例

  • 第一步:用户按照第 1 章文件结构中的要求解压并准备好数据。假设数据放在 /hdd/hdd1/factorCalDev/server/TLData/ 目录下,文件结构如下图:

  • 第二步:将模块同步到 DolphinDB 的 sever/modules 的目录下。

  • 第三步:载入模块和导入数据方法如下:
use DolphinDBModules::easyTLDataImport::loadTLData

// 登陆账户
login("admin", "123456")

// 设置文件目录
fileDir = "/hdd/hdd1/factorCalDev/server/TLData/"

/** 沪深合并*/
// 导入快照数据,单线程
jobid1 = autoLoadTongLianData(fileDir=fileDir, dataSource="TLSnapshot", parallel=1)
getJobStatus(jobid1)   // 查看任务状态

// 导入逐笔委托,3 并发
jobid2 = autoLoadTongLianData(fileDir=fileDir, dataSource="TLEntrust", parallel=3)
getJobStatus(jobid2)   // 查看任务状态

// 导入逐笔成交,3 并发
jobid3 = autoLoadTongLianData(fileDir=fileDir, dataSource="TLTrade", parallel=3)
getJobStatus(jobid3)   // 查看任务状态
  • 第四步:查询任务状态。

(1)使用 getJobStatus(jobid) 可以查询任务状态,当 endTime 有值的时候表示任务结束。例如:

getJobStatus(jobid3)

(2)使用 getJobDetails(jobid) 可以查询任务的中间信息。例如:

getJobDetails(jobid3)

(3)可以通过查询日志内容,查看任务执行结果。例如:

cat dolphindb.log | grep message

  • 第五步:查询数据。

(1)快照数据

select * from loadTable("dfs://TL_Level2", "snapshot") limit 10

(2)逐笔委托

select * from loadTable("dfs://TL_Level2", "entrust") limit 10

(3)逐笔成交

select * from loadTable("dfs://TL_Level2", "trade") limit 10

6. 注意事项

6.1 数据文件路径 fileDir 的设置

在模块中数据文件查找的方法如下:

  • 从 fileDir 目录下递归查找所有由 8 位数字组成的文件夹(即形如 “20221201” 的日期)。
  • 再将找到的所有日期和 startDate、endDate 进行字符串比较,从而达到导入数据日期筛选的目的。
  • 最后在每个日期文件夹下,递归查找所有以 csv 结尾的文件,从而获取该日期下的所有 csv 文件的绝对路径。

因为第一步是查找所有 8 位数字组成的文件夹,所以 autoLoadTongLianDataTest 函数的 fileDir 的路径下必须有一层目录是以形如 “20221201” 的日期命名。

所以如果用户想要导入一天的数据,需要通过 startDate、endDate 参数控制导入日期,而不是通过 fileDir 参数。

以上一章第五步图中的文件结构为例,假设只导入 2021.12.01 这一天的数据。不能如此设置导入日期:fileDir = "/hdd/hdd1/factorCalDev/server/TLData/2021/20211201"。否则会因为该目录下只有 csv 而找不到日期文件夹。

正确用法如下:

// 沪深分开存储:上交所, 导入快照数据,单线程,导入20211201 一天的数据
fileDir = "/hdd/hdd1/factorCalDev/server/TLData/"     // 或者 fileDir = "/hdd/hdd1/factorCalDev/server/TLData/2021/"
jobid1 = autoLoadTongLianData(fileDir=fileDir, dataSource="TLSnapshot", dbName="dfs://TL_SH_Level2", market="SH", startDate="20211201", endDate="20211201")
getJobStatus(jobid1)   // 查看任务状态

6.2 最低资源配置(并行度 parallel 的设置)

6.2.1 快照行情导入资源使用情况

通联数据的快照行情数据和最优买卖盘前 50 笔委托数据是两个分开的 csv 文件。为将二者结合,所以先将快照行情数据和最优买卖盘前 50 笔委托数据进行左连接后,再进行入库。

以沪深合并存储的方式导入深交所一天的快照数据为例,具体实现方案如下:

(1)将一天的单市场的快照行情数据和最优买卖盘前 50 笔委托数据的 csv 文件全部读入 DolphinDB 数据库中。此步骤中:

  • 2023.02.16 的深交所快照数据 mdl_6_28_0.csv 共有 13,608,508 行 89 列,读入后占用内存约 7.1 GB;
  • 最优卖价前 50 笔委托数据 mdl_6_28_1.csv 共有 13,608,508 行 62 列,读入后占用内存约 3.5 GB;
  • 最优买价前 50 笔委托数据 mdl_6_28_2.csv 共有 13,611,993 行 62 列,读入后占用内存约 3.5 GB。

(2)将数据处理成沪深合并的表结构,包括将 10 档量价数据和 50 档委托数据合并组成 array vector,并将上交所有的字段但深交所没有的字段用空值 NULL 填充。此步骤中:

  • array vector + 填充 NULL 值后的快照表总共 13,608,508 行 60 列,占用内存约 8.7 GB;
  • 最优卖价前 50 笔委托总共 13,608,508 行 4 列,读入后占用内存约 2.8 GB;
  • 最优买价前 50 笔委托总共 13,611,993 行 4 列,占用内存约 2.8 GB)

(3)根据 TradeTime / SecurityID / ImageStatus 三个字段对数据进行去重。此步骤中:

  • 去重后的快照表总共 13,608,508 行 60 列,占用内存约 8.7 GB;
  • 最优卖价前 50 笔委托总共 13,608,508 行 4 列,读入后占用内存约 2.8 GB;
  • 最优卖价前 50 笔委托总共 13,611,993 行 4 列,占用内存约 2.8 GB)

(4)根据 TradeTime / SecurityID ImageStatus 三个字段将买卖的 50 档数据进行左连接。此步骤中:

  • 连接后的买卖 50 档委托表总共 13,608,508 行 5 列,占用内存约 5.4 GB。
  • 将数据根据股票代码 SecurityID 的哈希值分成 50 份,每一份分别和最优买卖盘前 50 笔委托数据进行左连接,将连接后的数据直接加入数据库。该任务通过 ploop 实现并发执行。此步骤中:
    • 根据 hashBucket(SecurityID, 50) 算出哈希值,在快照数据中取出对应哈希值的数据。比如哈希值为 40 的快照数据共 343,461 行 60 列,占用内存约 225 MB;
    • 最优买卖盘前 50 笔委托数据共 343,461 行 5 列,占用内存约 144 MB;
    • 左连接后结果表共 343,461 行 62 列,占用内存约 364 MB,直接向库内 append 这部分数据)

(5)深交所和上交所串行导入,先完成深交所一天数据的导入,再按上述流程导入上交所一天的快照数据。

注意:因为快照数据的导入需要读入整个 csv,再内存里并发进行 join 和写入操作,所以内存消耗较高。

经测试,单并发导入快照数据占用内存资源约:53 GB

6.2.2 逐笔委托导入资源使用情况

为了实现数据去重的目的,会将一个市场一天的逐笔委托数据全部读入内存,进行去重后,再进行入库。

以沪深合并存储的方式导入深交所一天的逐笔委托为例,具体实现方案如下:

(1)将一天的单市场的逐笔委托的 csv 文件全部读入 DolphinDB 数据库中。此步骤中:

  • 2023.02.16 的深交所逐笔委托数据 mdl_6_33_0.csv 共有 99,798,969 行 12 列,读入后占用内存约 5.7 GB。

(2)将逐笔成交数据处理成沪深合并的表结构,包括将上交所有的字段但深交所没有的字段用空值 NULL 填充和根据 ChannelNo , ApplSeqNum 两个字段进行去重。此步骤中:

  • 填充 NULL 值 + 去重后的逐笔委托表总共 99,798,969 行 16 列,占用内存约 13.1 GB。

(3)将处理完的深交所逐笔委托数据导入数据库。

  • 深交所和上交所串行导入,先导完一天深交所,再按上述流程导入一天上交所快照数据。

模块中的数据库采用 TSDB 存储引擎,其写入策略是:

  • 数据先写入 Cache Engine,在 Cache Engine 内进行分区。
  • 按照 sortColumns 进行排序。
  • 当写入的数据达到 TSDBCacheEngineSize 时,进行刷盘。此时:
    • 若有数据继续写入,系统会再分配一块内存来接收新数据;
    • 若不满足该条件, 超过十分钟会强制刷盘。

所以使用 TSDB 引擎导入大量数据的时候,使用 LevelFileIndexCache,TSDBCacheEngine,异步排序,后台的 flush 等环节都会造成内存使用的增加。

注意:为了能够按照 ChannelNo , ApplSeqNum 这两个字段对数据进行去重,需要读入整个 csv 读入内存,使用 TSDB 引擎持续导入大量数据。所以导入时内存消耗较高。

经测试,单并发导入逐笔委托数据占用内存资源约:55 GB

6.2.3 逐笔成交导入资源使用情况

为了实现数据去重的目的,会将一个市场一天的逐笔成交数据全部读入内存,进行去重后,再进行入库。

以沪深合并存储的方式导入深交所一天的逐笔成交为例,具体实现方案如下:

(1)将一天的单市场的逐笔成交的 csv 文件全部读入 DolphinDB 数据库中。此步骤中:

  • 2023.02.16 的深交所逐笔成交数据 mdl_6_36_0.csv 共有 91,230,221 行 13 列,读入后占用内存约 6.4 GB。

(2)将逐笔成交数据处理成沪深合并的表结构,包括将上交所有的字段但深交所没有的字段用空值 NULL 填充和根据 ChannelNo , ApplSeqNum 两个字段进行去重。此步骤中:

  • 填充 NULL 值 + 去重后的逐笔委托表总共 91,230,221 行 19 列,占用内存约 15.7 GB。

(3)将处理完的深交所逐笔委托数据导入数据库。

  • 深交所和上交所串行导入,先导完一天深交所,再按上述流程导入一天上交所快照数据。

注意:为了能够按照 ChannelNo , ApplSeqNum 这两个字段对数据进行去重,需要读入整个 csv 读入内存,使用 TSDB 引擎持续导入大量数据。所以导入时内存消耗较高。

经测试,单并发导入逐笔成交数据占用内存资源约:58 GB

综上,控制并发的参数 parallel 需要根据实际的内存情况设置。**建议配置 maxMemSize 至少为 64 GB,**这超过了社区版 License 内存的限制,可以前往 DolphinDB 官网申请企业版试用授权许可。

7. 性能测试

7.1 测试环境

单节点 8 核 256 GB 的环境来测试导入性能,环境配置资源如下:

软硬件项信息
OS(操作系统)CentOS Linux 7 (Core)
内核3.10.0-1160.el7.x86_64
CPUIntel(R) Xeon(R) Gold 5220R CPU @ 2.20GHz
内存256 GB
磁盘2 块 SSD,3.84 TB 固态硬盘 SATA 读取密集型 6 Gbps 512 2.5 英寸 Flex Bay AG 硬盘 1 DWPD
单盘测试随机写
- 平均写入IO:266MB/s

7.2 性能结果

只测试了通联数据沪深合并存储的导入性能:

数据源数据量数据天数耗时(min)RPS(W/s)吞吐量(MB/s)原始 csv 大小(GB)单副本磁盘占用大小(GB)压缩比并发数最大内存占用(GB)
snapshot475,469,6702049.6315.97153.86447.4037.4111.967185
entrust2,712,071,0192028.12160.73131.45216.6060.003.617240
trade2,067,012,8752024.41141.14132.17189.0249.053.857253

7.3 吞吐量提升建议

如需提高数据导入的吞吐量,可参考以下优化策略:

(1)通过设置参数 parallel,增加后台导入任务的数据,提高导入的并行度。注意环境内存资源的使用。

(2)使用读写性能更好的硬盘。

附录

DolphinDBModules.zip

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/694253.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue之事件修饰符

文章目录 前言一、事件修饰符二、实例1.prevent2.stop3.capture4.self 总结 前言 对事件进行处理。 一、事件修饰符 prevent:阻止默认事件(常用)。stop:阻止事件冒泡(常用)。once:事件只触发一…

Linux 系统下克隆 Github 项目指令

文章目录 1. 安装 git2. 设置用户名和邮箱3. 生成密钥4. 复制密钥5. 配置 Github SSH keys6. 克隆项目 1. 安装 git Ubuntu 安装指令 apt-get install gitCentOS 安装指令 yum install git 查看 Git 版本信息 git version2. 设置用户名和邮箱 git config --global user.nam…

【AI底层逻辑】——篇章3(下):信息交换信息加密解密信息中的噪声

续:【AI底层逻辑】——篇章3(上):数据、信息与知识&香农信息论&信息熵 目录 三、信息是如何交换的 1、互联网与信息交换 2、哈夫曼和有效编码 四、信息的加密与解密 1、密码学的发展 2、可以被公开的密钥 五、信息…

js 左右滑动切换图片

一、效果图 二、代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdev…

python在线考试系统-计算机毕设 附源码78268

Django在线考试系统 摘 要 本论文主要论述了如何使用python语言、Django框架开发一个在线考试系统&#xff0c;本系统将严格按照软件开发流程&#xff0c;进行各个阶段的工作&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述该系统的当前背景以及系统…

【JAVA基础】一文了解forEach循环

前言 相信大家肯定都看过阿里巴巴开发手册&#xff0c;而在阿里巴巴开发手册中明确的指出&#xff0c;不要再foreach循环里面进行元素的add和remove&#xff0c;如果你非要进行remove元素&#xff0c;那么请使用Iterator方式&#xff0c;如果存在并发&#xff0c;那么你一定要…

el-table控制列的显示与隐藏

1、序言 源码在下方&#xff0c;复制粘贴就可运行 当一个表格太多列的时候&#xff0c;想要显示/隐藏一些列&#xff0c;目标效果如下&#xff1a; 默认情况下&#xff0c;展示所有列 隐藏某一列 2、原理 &#xff08;1&#xff09;data数据有&#xff1a;tableData为表格数据&…

c++类和对象收尾

文章目录 隐式类型转换匿名对象拷贝构造----->构造 隐式类型转换 //隐式类型转换 class A { public:/*explicit A(int a ):_a(a){cout << "A(int a )" << endl;}*/A(int a):_a(a){cout << "A(int a )" << endl;}A(const A&…

4. QT环境下使用OPenCV(视频或摄像头读取显示在QLabel控件上)

1. 说明 在用opencv处理图像时,图像的来源大部分情况下是从视频中读取过来的,视频可以是本地保存的视频,也可以是本地摄像头或者网络摄像头实时拍摄的视频。 效果展示: opencv读取视频 2. 具体操作 关于视频的读取,实际上也是从视频中将每一帧图像加载后,显示到QLabel…

【数据可视化方案分享】电商数据分析

本文所分享的电商数据分析报表均来自奥威BI软件的电商数据分析方案&#xff01;该方案是一套包含数据采集、数据建模、数据分析报表的系统化、标准化数据分析方案&#xff0c;下载套用&#xff0c;立见效果&#xff01; 注意&#xff0c;奥威BI软件的电商数据分析方案分两类&a…

Elasticsearch Global Ordinals

用于减少字符串字段 fielddata 内存使用的技术之一称为序数&#xff08;ordinals&#xff09;。想象一下&#xff0c;我们有十亿个文档&#xff0c;每个文档都有一个状态字段。 只有三种状态&#xff1a;status_pending、status_published、status_deleted。 如果我们要在内存中…

Ubuntu离线安装Telnet服务

通过ssh上传telnet包&#xff0c;下载地址&#xff1a;telnet-0.17-41.2build1-amd64资源-CSDN文库 解压telnet包&#xff1a; tar -xzvf telnet_0.17-41.2build1_amd64.tar.gz 安装telnet服务&#xff1a; dpkg -i telnet_0.17-41.2build1_amd64.deb 安装完毕&#xff0c;测…

2023第三届中国RPA+AI开发者大赛圆满收官获奖名单公示

6月26日&#xff0c;历时三个月的2023「第三届中国RPAAI开发者大赛」在苏州国际博览中心圆满收官。本次大赛以“探索创新智能融合”为主题&#xff0c;旨在寻找并推动中国RPA和AI领域的创新人才和前沿技术。云集来自各大行业与领域的企业、高校等326支优秀团队&#xff0c;共计…

chatgpt赋能python:Python读取xlsx中的超链接

Python读取xlsx中的超链接 xlsx是一种常用的电子表格文件格式&#xff0c;在日常的工作生活中经常使用。xlsx文件中可以包含超链接&#xff0c;作为文件中数据的补充和扩展。而Python作为一门强大的编程语言&#xff0c;可以帮助我们轻松读取xlsx文件中的超链接&#xff0c;进…

HarmonyOS/OpenHarmony应用开发-Stage模型UIAbility组件使用(一)

一、UIAbility组件概述1.概述 UIAbility组件是一种包含UI界面的应用组件&#xff0c;主要用于和用户交互。 UIAbility组件是系统调度的基本单元&#xff0c;为应用提供绘制界面的窗口&#xff1b;一个UIAbility组件中可以通过多个页面来实现一个功能模块。每一个UIAbility组件实…

督查督办管理系统新旧时代

旧时代&#xff1a; 传统的督办主要是通过督办人员现场调查催办、电话催办提交工作进展情况等方法&#xff0c;加上市面上的成品型督办系统功能固化&#xff0c;无法根据企业个性化业务需求灵活调整&#xff0c;所以在工作督办上存在诸多不足。 数据管理滞后&#xff0c;效率不…

【ASP技术】web杂谈(1)之什么是ASP?

涉及知识点 什么是 ASP&#xff0c;Request和Response的介绍&#xff0c;Application和session的详细讲解&#xff0c;ASP的特点&#xff0c;ASP的编程环境&#xff0c;ASP内嵌对象&#xff0c;Asp的应用范例。深入了解ASP技术。 原创于&#xff1a;CSDN博主-《拄杖盲学轻声码…

npm install执行报错:ENOENT: no such file or directory, open ‘XXXXX\package.json‘

执行 npm install 报错 解决办法&#xff1a; 先执行 npm init -f 再安装 npm install

使用Python+Flask+HTML写一个测试小工具

背景&#xff1a; 由于公司安全规范限制&#xff0c;我司的测试、预发布、灰度、生产环境&#xff0c;接口间的数据通信通常是加密处理的&#xff0c;给我们日常定位缺陷带来了一定的阻碍&#xff0c;因此我决定使用Python写一个工具&#xff0c;将加密数据转换为正常数据&…

vscode面板菜单字体太大或者太小解决方式【自留记录】

vscode面板菜单字体太大或者太小解决方式【自留记录】 菜单图标 - 设置 - 搜索栏输入 zoom - 输入 0 回车