Apache flink 如何在ApacheFlink中创建外部目录表
我尝试创建和外部目录以在ApacheFlink表中使用。我创建并添加到Flink表环境(这里是官方)。由于某些原因,“目录”中唯一存在的外部表在扫描期间找不到。我在上面的代码中遗漏了什么Apache flink 如何在ApacheFlink中创建外部目录表,apache-flink,apache-calcite,flink-sql,Apache Flink,Apache Calcite,Flink Sql,我尝试创建和外部目录以在ApacheFlink表中使用。我创建并添加到Flink表环境(这里是官方)。由于某些原因,“目录”中唯一存在的外部表在扫描期间找不到。我在上面的代码中遗漏了什么 val catalogName = s"externalCatalog$fileNumber" val ec: ExternalCatalog = getExternalCatalog(catalogName, 1, tableEnv) tableEnv.registerExternalCatalo
val catalogName = s"externalCatalog$fileNumber"
val ec: ExternalCatalog = getExternalCatalog(catalogName, 1, tableEnv)
tableEnv.registerExternalCatalog(catalogName, ec)
val s1: Table = tableEnv.scan("S_EXT")
def getExternalCatalog(catalogName: String, fileNumber: Int, tableEnv: BatchTableEnvironment): ExternalCatalog = {
val cat = new InMemoryExternalCatalog(catalogName)
// external Catalog table
val externalCatalogTableS = getExternalCatalogTable("S")
// add external Catalog table
cat.createTable("S_EXT", externalCatalogTableS, ignoreIfExists = false)
cat
}
private def getExternalCatalogTable(fileName: String): ExternalCatalogTable = {
// connector descriptor
val connectorDescriptor = new FileSystem()
connectorDescriptor.path(getFilePath(fileNumber, fileName))
// format
val fd = new Csv()
fd.field("X", Types.STRING)
fd.field("Y", Types.STRING)
fd.fieldDelimiter(",")
// statistic
val statistics = new Statistics()
statistics.rowCount(0)
// metadata
val md = new Metadata()
ExternalCatalogTable.builder(connectorDescriptor)
.withFormat(fd)
.withStatistics(statistics)
.withMetadata(md)
.asTableSource()
}
上面的示例就是其中的一部分。这可能是一个名称空间问题。外部目录中的表由目录的名称列表(可能是模式)以及表名标识 在您的示例中,以下各项应起作用:
val s1: Table = tableEnv.scan("externalCatalog1", "S_EXT")
您可以查看以了解如何使用外部目录。创建外部目录的原因是为“目录”中的每个表提供统计信息。这一原因已在中解释。是的,它是有效的,但只有当我不在表中包含必要的统计信息时,才有可能在外部目录表中使用对象统计信息?返回的这部分错误:在类路径中找不到适合“org.apache.flink.table.factories.BatchTableSourceFactory”的表工厂。原因:匹配的工厂“org.apache.flink.table.sources.CsvBatchTableSourceFactory”不支持“statistics.row count”。。。这似乎是特定
CsvBatchTableSourceFactory
的一个问题。您可能希望分叉并扩展它以支持统计信息。