I have added a data source that name is maxcpt_myproject.
java.sql.SQLException: Fail to run sql:select count(*) from `myproject`.`myproject`.`tab1`;, Error:[400] com.aliyun.odps.OdpsException: ODPS-0130161:[1,47] Parse exception - invalid token '.'
The correct sql should be select count(*) from
myproject.
tab1``, but dremio commit a wrong sql with duplicate projects.
arp.yaml
file:
metadata:
# Manually Configured Metadata Section.
name: MAXCOMPUTE
apiname: maxcompute
spec_version: '1'
syntax:
# Manually Configured Syntax Section.
identifier_quote: '`'
identifier_length_limit: 128
allows_boolean_literal: false
map_boolean_literal_to_bit: false
supports_catalogs: false
supports_schemas: false
...
...
MaxcomputeConf.java
file:
@SourceType(value = "MAXCOMPUTE", label = "Maxcompute")
public class MaxcomputeConf extends AbstractArpConf<MaxcomputeConf> {
private static final String ARP_FILENAME = "arp/implementation/maxcompute-arp.yaml";
private static final ArpDialect ARP_DIALECT =
AbstractArpConf.loadArpFile(ARP_FILENAME, (ArpDialect::new));
private static final String DRIVER = "com.aliyun.odps.jdbc.OdpsDriver";
@NotBlank
@Tag(1)
@DisplayMetadata(label = "JDBC URL (Ex: jdbc:odps:http://service.cn.maxcompute.aliyun.com/api?project=xxx&charset=utf-8&access_id=xxx&access_key=xxx)")
public String jdbcURL;
@Tag(2)
@DisplayMetadata(label = "Record fetch size")
@NotMetadataImpacting
public int fetchSize = 200;
@VisibleForTesting
public String toJdbcConnectionString() {
checkNotNull(this.jdbcURL, "Missing jdbcURL.");
return jdbcURL;
}
@Override
@VisibleForTesting
public Config toPluginConfig(SabotContext context) {
return JdbcStoragePlugin.Config.newBuilder()
.withDialect(getDialect())
.withFetchSize(fetchSize)
.withDatasourceFactory(this::newDataSource)
.clearHiddenSchemas()
.addHiddenSchema("SYSTEM")
.build();
}
private CloseableDataSource newDataSource() {
return DataSources.newGenericConnectionPoolDataSource(DRIVER,
toJdbcConnectionString(), null, null, null, DataSources.CommitMode.DRIVER_SPECIFIED_COMMIT_MODE);
}
@Override
public ArpDialect getDialect() {
return ARP_DIALECT;
}
@VisibleForTesting
public static ArpDialect getDialectSingleton() {
return ARP_DIALECT;
}
}