Apache flink 如何在ApacheFlink中创建外部目录表

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

我尝试创建和外部目录以在ApacheFlink表中使用。我创建并添加到Flink表环境(这里是官方)。由于某些原因,“目录”中唯一存在的外部表在扫描期间找不到。我在上面的代码中遗漏了什么

  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
的一个问题。您可能希望分叉并扩展它以支持统计信息。