Featured image of post 如何写一个Trino Connector

如何写一个Trino Connector

并非开发文档

最近在给实验室的存储引擎写 Trino Connector(其实是增加一路数据源),记录一下开发的过程。

最开始要开发这个插件的时候,还没怎么用过Trino,大概看了一眼 Trino | Trino: The Definitive Guide ,知道了这是个什么玩意儿,应该怎么用。但是对于开发没有什么大用。

接着看Developer guide ,以及直接看示例代码,大概了解到了要实现哪些类,这些类在整个查询流程中是什么时候被调度的,以及节点间的数据交换内容和序列化方法。

之后画了一些草图,就开始糊代码。

graph TD
		SplitManager -->|"getScanOperator"|so[ScanOperator]
		so --> |"getInputSplits(BaseTable table)"|lis["List InputSplit "]
		lis --> getScheme
		lis --> gl["get layouts"]
		gl --> split_index
		gl --> orderdPath --> InputSplits
		gl --> compactPath --> InputSplits
		InputSplits --> PS2["PixelsSplits"]
		so --> SplitSource
	  SplitSource --> P["PixelsSplit"] 
    
    PPSP --> PS2
    PPSP["Pixels Page Source Provider"] --> PS
    PS["PageSource"] -->|"PixelsReaderImpl"|PixelsRecordReader
    
    PixelsRecordReader-->|"getNextPage"|Page

知道大致流程之后代码就很好糊了,主要就是缺什么接口去找人提需求。

classDiagram
 PixelsSplit <|-- PixelsFileSplit
 PixelsSplit <|-- PixelsBufferSplit
 
  PixelsBufferSplit:  - RetinaSplitType type
  PixelsBufferSplit:  - []Integer ids
  PixelsBufferSplit:  - []byte data
  
  class PixelsFileSplit
	PixelsFileSplit:  + []String paths
	PixelsFileSplit:  + []Integer rgStarts
	PixelsFileSplit:  + []Integer rgLengths
	PixelsFileSplit:  + String tableName
	PixelsFileSplit:  + String StorageName
	PixelsFileSplit:  + String SchemeName
	
  
  
  PixelsPageSourceProvider ..> PixelsSplit
  
  PixelsPageSourceProvider: + ConnectorPageSource createPageSource(ConnectorSplit split, ...)
  
  ConnectorPageSource <.. PixelsPageSourceProvider
  ConnectorPageSource <|-- PixelsPageSource
  ConnectorPageSource <|-- PixelsBufferPageSource
  
  PixelsPageSource: - PixelsReader reader
  PixelsBufferPageSource: - PixelsBlockReader reader
  
  PixelsPageSource  : +Page getNextPage()
  PixelsBufferPageSource  : +Page getNextPage()
  
  PixelsPageSource ..> PixelsFileSplit
  PixelsBufferPageSource ..> PixelsBufferSplit

最后测试的时候,之前不太清楚Java代码该如何调试。只会打LOG之后重新打Jar包,再重启Trino看哪里出了问题。不过后面学会了怎么JVM远程调试,配合LOG感觉就调试得挺舒服了。