Class AggregatedDialect

Object
org.apache.spark.sql.jdbc.JdbcDialect
org.apache.spark.sql.jdbc.AggregatedDialect
All Implemented Interfaces:
Serializable, org.apache.spark.internal.Logging, NoLegacyJDBCError

public class AggregatedDialect extends JdbcDialect implements NoLegacyJDBCError
AggregatedDialect can unify multiple dialects into one virtual Dialect. Dialects are tried in order, and the first dialect that does not return a neutral element will win.

param: dialects List of dialects.

See Also:
  • Constructor Details

    • AggregatedDialect

      public AggregatedDialect(scala.collection.immutable.List<JdbcDialect> dialects)
  • Method Details

    • canHandle

      public boolean canHandle(String url)
      Description copied from class: JdbcDialect
      Check if this dialect instance can handle a certain jdbc url.
      Specified by:
      canHandle in class JdbcDialect
      Parameters:
      url - the jdbc url.
      Returns:
      True if the dialect can be applied on the given jdbc url.
    • getCatalystType

      public scala.Option<DataType> getCatalystType(int sqlType, String typeName, int size, MetadataBuilder md)
      Description copied from class: JdbcDialect
      Get the custom datatype mapping for the given jdbc meta information.

      Guidelines for mapping database defined timestamps to Spark SQL timestamps:

      • TIMESTAMP WITHOUT TIME ZONE if preferTimestampNTZ -> TimestampNTZType
      • TIMESTAMP WITHOUT TIME ZONE if !preferTimestampNTZ -> TimestampType(LTZ)
      • TIMESTAMP WITH TIME ZONE -> TimestampType(LTZ)
      • TIMESTAMP WITH LOCAL TIME ZONE -> TimestampType(LTZ)
      • If the TIMESTAMP cannot be distinguished by sqlType and typeName, preferTimestampNTZ is respected for now, but we may need to add another option in the future if necessary.

      Overrides:
      getCatalystType in class JdbcDialect
      Parameters:
      sqlType - Refers to Types constants, or other constants defined by the target database, e.g. -101 is Oracle's TIMESTAMP WITH TIME ZONE type. This value is returned by ResultSetMetaData.getColumnType(int).
      typeName - The column type name used by the database (e.g. "BIGINT UNSIGNED"). This is sometimes used to determine the target data type when sqlType is not sufficient if multiple database types are conflated into a single id. This value is returned by ResultSetMetaData.getColumnTypeName(int).
      size - The size of the type, e.g. the maximum precision for numeric types, length for character string, etc. This value is returned by ResultSetMetaData.getPrecision(int).
      md - Result metadata associated with this type. This contains additional information from ResultSetMetaData or user specified options.
      Returns:
      An option the actual DataType (subclasses of DataType) or None if the default type mapping should be used.
    • getJDBCType

      public scala.Option<JdbcType> getJDBCType(DataType dt)
      Description copied from class: JdbcDialect
      Retrieve the jdbc / sql type for a given datatype.
      Overrides:
      getJDBCType in class JdbcDialect
      Parameters:
      dt - The datatype (e.g. StringType)
      Returns:
      The new JdbcType if there is an override for this DataType
    • getSchemaQuery

      public String getSchemaQuery(String table)
      Description copied from class: JdbcDialect
      The SQL query that should be used to discover the schema of a table. It only needs to ensure that the result set has the same schema as the table, such as by calling "SELECT * ...". Dialects can override this method to return a query that works best in a particular database.
      Overrides:
      getSchemaQuery in class JdbcDialect
      Parameters:
      table - The name of the table.
      Returns:
      The SQL query to use for discovering the schema.
    • getTableExistsQuery

      public String getTableExistsQuery(String table)
      Description copied from class: JdbcDialect
      Get the SQL query that should be used to find if the given table exists. Dialects can override this method to return a query that works best in a particular database.
      Overrides:
      getTableExistsQuery in class JdbcDialect
      Parameters:
      table - The name of the table.
      Returns:
      The SQL query to use for checking the table.
    • getTruncateQuery

      public String getTruncateQuery(String table, scala.Option<Object> cascade)
      The SQL query used to truncate a table.
      Overrides:
      getTruncateQuery in class JdbcDialect
      Parameters:
      table - The table to truncate.
      cascade - Whether or not to cascade the truncation. Default value is the value of isCascadingTruncateTable()
      Returns:
      The SQL query to use for truncating a table
    • isCascadingTruncateTable

      public scala.Option<Object> isCascadingTruncateTable()
      Description copied from class: JdbcDialect
      Return Some[true] iff TRUNCATE TABLE causes cascading default. Some[true] : TRUNCATE TABLE causes cascading. Some[false] : TRUNCATE TABLE does not cause cascading. None: The behavior of TRUNCATE TABLE is unknown (default).
      Overrides:
      isCascadingTruncateTable in class JdbcDialect
      Returns:
      (undocumented)
    • quoteIdentifier

      public String quoteIdentifier(String colName)
      Description copied from class: JdbcDialect
      Quotes the identifier. This is used to put quotes around the identifier in case the column name is a reserved keyword, or in case it contains characters that require quotes (e.g. space).
      Overrides:
      quoteIdentifier in class JdbcDialect
      Parameters:
      colName - (undocumented)
      Returns:
      (undocumented)