Calcite-[5]-example-csv简析
来源:互联网 发布:yum 不支持python 2.7 编辑:程序博客网 时间:2024/05/29 09:01
一 源码下载
参照下文,下载编译源码
Calcite-[1]-Tutorial
运行CsvTest 总体感知csv样例工程
输出
Test ignored.FredEricJohnWilmaAlice100, Fred, 10, , , 30, 25, true, false, 1996-08-03110, Eric, 20, M, San Francisco, 3, 80, null, false, 2001-01-01110, John, 40, M, Vancouver, 2, null, false, true, 2002-05-03120, Wilma, 20, F, , 1, 5, null, true, 2005-09-07130, Alice, 40, F, Vancouver, 2, null, false, true, 2007-01-01FredEricJohnWilmaAliceTest ignored.SalesMarketingAccounts100, Fred, 10, , , 30, 25, true, false, 1996-08-03110, Eric, 20, M, San Francisco, 3, 80, null, false, 2001-01-01110, John, 40, M, Vancouver, 2, null, false, true, 2002-05-03120, Wilma, 20, F, , 1, 5, null, true, 2005-09-07130, Alice, 40, F, Vancouver, 2, null, false, true, 2007-01-01100, Fred, 10, , , 30, 25, true, false, 1996-08-03110, Eric, 20, M, San Francisco, 3, 80, null, false, 2001-01-01110, John, 40, M, Vancouver, 2, null, false, true, 2002-05-03120, Wilma, 20, F, , 1, 5, null, true, 2005-09-07130, Alice, 40, F, Vancouver, 2, null, false, true, 2007-01-01
二、简析1-model.json
model.json
{ "version": "1.0", "defaultSchema": "SALES", "schemas": [ { "name": "SALES", "type": "custom", "factory": "org.apache.calcite.adapter.csv.CsvSchemaFactory", "operand": { "directory": "sales" } } ]}
(1)CsvSchemaFactory
CsvSchemaFactory根据directory构建CsvSchema
CsvSchemaFactory::create
根据json中的directory和flavor 构建一个CsvSchema(directoryFile, flavor);
简要如下:
public class CsvSchemaFactory implements SchemaFactory { public static final CsvSchemaFactory INSTANCE = new CsvSchemaFactory(); private CsvSchemaFactory() { } public Schema create(SchemaPlus parentSchema, String name, Map<String, Object> operand) { final String directory = (String) operand.get("directory"); File directoryFile = new File(directory); String flavorName = (String) operand.get("flavor"); CsvTable.Flavor flavor = CsvTable.Flavor.SCANNABLE; return new CsvSchema(directoryFile, flavor); }}(2)CsvSchema
CsvSchema:Schema mapped onto a directory of CSV files. Each table in the schema is a CSV file in that directory.
将文件和table做个映射,每个文件映射为一个table
public class CsvSchema extends AbstractSchema { private final File directoryFile; private final CsvTable.Flavor flavor; private Map<String, Table> tableMap;CsvSchema::createTableMap private Map<String, Table> createTableMap() 主要根据目录遍历所有 ".csv", ".csv.gz", ".json", ".json.gz",对遍历的文件,调用createTable构建表CsvSchema::createTable 调用 CsvTranslatableTable or CsvScannableTable or CsvFilterableTable构建表
阅读全文