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

时间:2019-01-20 16:27:58

标签: apache-flink apache-calcite flink-sql

我试图创建和ExternalCatalog在Apache Flink表中使用。我创建并添加到Flink表环境(这里是官方的documentation)。由于某种原因,“目录”中存在唯一的外部表,因此在扫描过程中找不到该表。我在上面的代码中错过了什么?

  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()
  }

上面的示例是此test file in git的一部分。

1 个答案:

答案 0 :(得分:1)

这可能是名称空间问题。外部目录中的表由目录名称(可能是模式)的列表标识,最后是表名称。

在您的示例中,以下应该起作用:

                                       $.ajax({
                                            type: "POST",
                                            url: "Lta",
                                            cache: false,
                                            data: { "Id": Id },
                                            success: function (response) {
                                                if (response.length > 0) {
                                                    var i=0;
                                                    var selectconfig = "{ ";
                                                    for (var lettera in response) {
                                                        i++;
                                                        selectconfig = selectconfig + response.Id + ':"' + response.Date + ' ' + response.name + '"';
                                                        if (i != response.length-1) {
                                                            selectconfig = selectconfig + ",";
                                                        }
                                                    }
                                                }                                                    
                                                $.each(selectconfig, function(key, value) {   
                                                        $('#LettereSelect')
                                                            .append($("<option></option>")
                                                                    .attr("value",value)
                                                                    .text(key)); 
                                                });
                                                }
                                            },                    
                                            error: function (jqXHR, textStatus, errorThrown) {
                                                alert('Error - ' + errorThrown);
                                            }

您可以查看ExternalCatalogTest,了解如何使用外部目录。