我试图创建和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的一部分。
答案 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,了解如何使用外部目录。