Class HiveDialect
- java.lang.Object
-
- mondrian.spi.impl.JdbcDialectImpl
-
- mondrian.spi.impl.HiveDialect
-
- All Implemented Interfaces:
Dialect
- Direct Known Subclasses:
ImpalaDialect
public class HiveDialect extends JdbcDialectImpl
Implementation ofDialect
for the Hive database.- Since:
- Jan 10, 2011
- Author:
- Hongwei Fu
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface mondrian.spi.Dialect
Dialect.DatabaseProduct, Dialect.Datatype
-
-
Field Summary
Fields Modifier and Type Field Description static JdbcDialectFactory
FACTORY
-
Fields inherited from class mondrian.spi.impl.JdbcDialectImpl
databaseProduct, permitsSelectNotInGroupBy, productVersion
-
-
Constructor Summary
Constructors Constructor Description HiveDialect(Connection connection)
Creates a HiveDialect.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
allowsAs()
Returns whether the SQL dialect allows "AS" in the FROM clause.boolean
allowsCompoundCountDistinct()
Returns whether this Dialect allows multiple arguments to theCOUNT(DISTINCT ...) aggregate function, for example
SELECT COUNT(DISTINCT x, y) FROM t
boolean
allowsJoinOn()
Returns whether this dialect supports "ANSI-style JOIN syntax",FROM leftTable JOIN rightTable ON conditon
.boolean
allowsOrderByAlias()
Returns true if aliases defined in the SELECT clause can be used as expressions in the ORDER BY clause.protected String
deduceIdentifierQuoteString(DatabaseMetaData databaseMetaData)
protected int
deduceMaxColumnNameLength(DatabaseMetaData databaseMetaData)
protected boolean
deduceReadOnly(DatabaseMetaData databaseMetaData)
protected Set<List<Integer>>
deduceSupportedResultSetStyles(DatabaseMetaData databaseMetaData)
String
generateInline(List<String> columnNames, List<String> columnTypes, List<String[]> valueList)
Generates a SQL statement to represent an inline dataset.protected String
generateOrderByNulls(String expr, boolean ascending, boolean collateNullsLast)
Generates SQL to force null values to collate last.protected void
quoteDateLiteral(StringBuilder buf, String value, Date date)
Helper method forJdbcDialectImpl.quoteDateLiteral(StringBuilder, String)
.void
quoteTimestampLiteral(StringBuilder buf, String value)
Appends to a buffer a timestamp literal.boolean
requiresAliasForFromQuery()
Returns whether this Dialect requires subqueries in the FROM clause to have an alias.boolean
requiresGroupByAlias()
Returns true if this Dialect can include expressions in the GROUP BY clause only by adding an expression to the SELECT clause and using its alias.boolean
requiresOrderByAlias()
Returns true if this Dialect can include expressions in the ORDER BY clause only by adding an expression to the SELECT clause and using its alias.boolean
requiresUnionOrderByExprToBeInSelectClause()
Returns true if this dialect allows an expression in the ORDER BY clause of a UNION (or other set operation) query only if it occurs in the SELECT clause.boolean
requiresUnionOrderByOrdinal()
Returns true if this dialect allows only integers in the ORDER BY clause of a UNION (or other set operation) query.-
Methods inherited from class mondrian.spi.impl.JdbcDialectImpl
allowsCountDistinct, allowsCountDistinctWithOtherAggs, allowsDdl, allowsDialectSharing, allowsFromQuery, allowsMultipleCountDistinct, allowsMultipleDistinctSqlMeasures, allowsRegularExpressionInWhereClause, allowsSelectNotInGroupBy, appendHintsAfterFromClause, caseWhenElse, computeStatisticsProviders, deduceProductName, deduceProductVersion, deduceSupportsSelectNotInGroupBy, extractEmbeddedFlags, generateCountExpression, generateInlineForAnsi, generateInlineGeneric, generateOrderByNullsAnsi, generateOrderItem, generateRegularExpression, getDatabaseProduct, getMaxColumnNameLength, getProduct, getQuoteIdentifierString, getStatisticsProviders, getType, isDatabase, needsExponent, quote, quoteBooleanLiteral, quoteDateLiteral, quoteIdentifier, quoteIdentifier, quoteIdentifier, quoteIdentifier, quoteNumericLiteral, quoteStringLiteral, quoteTimeLiteral, quoteTimestampLiteral, requiresHavingAlias, supportsGroupByExpressions, supportsGroupingSets, supportsMultiValueInExpr, supportsResultSetConcurrency, supportsUnlimitedValueList, toString, toUpper
-
-
-
-
Field Detail
-
FACTORY
public static final JdbcDialectFactory FACTORY
-
-
Constructor Detail
-
HiveDialect
public HiveDialect(Connection connection) throws SQLException
Creates a HiveDialect.- Parameters:
connection
- Connection- Throws:
SQLException
- on error
-
-
Method Detail
-
deduceIdentifierQuoteString
protected String deduceIdentifierQuoteString(DatabaseMetaData databaseMetaData)
- Overrides:
deduceIdentifierQuoteString
in classJdbcDialectImpl
-
deduceSupportedResultSetStyles
protected Set<List<Integer>> deduceSupportedResultSetStyles(DatabaseMetaData databaseMetaData)
- Overrides:
deduceSupportedResultSetStyles
in classJdbcDialectImpl
-
deduceReadOnly
protected boolean deduceReadOnly(DatabaseMetaData databaseMetaData)
- Overrides:
deduceReadOnly
in classJdbcDialectImpl
-
deduceMaxColumnNameLength
protected int deduceMaxColumnNameLength(DatabaseMetaData databaseMetaData)
- Overrides:
deduceMaxColumnNameLength
in classJdbcDialectImpl
-
allowsCompoundCountDistinct
public boolean allowsCompoundCountDistinct()
Description copied from interface:Dialect
Returns whether this Dialect allows multiple arguments to theCOUNT(DISTINCT ...) aggregate function, for example
SELECT COUNT(DISTINCT x, y) FROM t
- Specified by:
allowsCompoundCountDistinct
in interfaceDialect
- Overrides:
allowsCompoundCountDistinct
in classJdbcDialectImpl
- Returns:
- whether Dialect allows multiple arguments to COUNT DISTINCT
- See Also:
Dialect.allowsCountDistinct()
,Dialect.allowsMultipleCountDistinct()
-
requiresAliasForFromQuery
public boolean requiresAliasForFromQuery()
Description copied from interface:Dialect
Returns whether this Dialect requires subqueries in the FROM clause to have an alias.- Specified by:
requiresAliasForFromQuery
in interfaceDialect
- Overrides:
requiresAliasForFromQuery
in classJdbcDialectImpl
- Returns:
- whether dialewct requires subqueries to have an alias
- See Also:
Dialect.allowsFromQuery()
-
requiresOrderByAlias
public boolean requiresOrderByAlias()
Description copied from interface:Dialect
Returns true if this Dialect can include expressions in the ORDER BY clause only by adding an expression to the SELECT clause and using its alias.For example, in such a dialect,
SELECT x FROM t ORDER BY x + y
SELECT x, x + y AS z FROM t ORDER BY z
MySQL, DB2 and Ingres are examples of such dialects.
- Specified by:
requiresOrderByAlias
in interfaceDialect
- Overrides:
requiresOrderByAlias
in classJdbcDialectImpl
- Returns:
- Whether this Dialect can include expressions in the ORDER BY clause only by adding an expression to the SELECT clause and using its alias
-
allowsOrderByAlias
public boolean allowsOrderByAlias()
Description copied from interface:Dialect
Returns true if aliases defined in the SELECT clause can be used as expressions in the ORDER BY clause.For example, in such a dialect,
SELECT x, x + y AS z FROM t ORDER BY z
MySQL, DB2 and Ingres are examples of dialects where this is true; Access is a dialect where this is false.
- Specified by:
allowsOrderByAlias
in interfaceDialect
- Overrides:
allowsOrderByAlias
in classJdbcDialectImpl
- Returns:
- Whether aliases defined in the SELECT clause can be used as expressions in the ORDER BY clause.
-
requiresGroupByAlias
public boolean requiresGroupByAlias()
Description copied from interface:Dialect
Returns true if this Dialect can include expressions in the GROUP BY clause only by adding an expression to the SELECT clause and using its alias.For example, in such a dialect,
SELECT x, x FROM t GROUP BY x
SELECT x AS a, x AS b FROM t ORDER BY a, b
Infobright is the only such dialect.
- Specified by:
requiresGroupByAlias
in interfaceDialect
- Overrides:
requiresGroupByAlias
in classJdbcDialectImpl
- Returns:
- Whether this Dialect can include expressions in the GROUP BY clause only by adding an expression to the SELECT clause and using its alias
-
requiresUnionOrderByExprToBeInSelectClause
public boolean requiresUnionOrderByExprToBeInSelectClause()
Description copied from interface:Dialect
Returns true if this dialect allows an expression in the ORDER BY clause of a UNION (or other set operation) query only if it occurs in the SELECT clause.For example,
SELECT x, y + z FROM t
is allowed but
UNION ALL
SELECT x, y + z FROM t
ORDER BY y + zSELECT x, y, z FROM t
UNION ALL
SELECT x, y, z FROM t
ORDER BY y + zSELECT x, y, z FROM t ORDER BY y + z
is not.Access is an example of a dialect with this restriction.
- Specified by:
requiresUnionOrderByExprToBeInSelectClause
in interfaceDialect
- Overrides:
requiresUnionOrderByExprToBeInSelectClause
in classJdbcDialectImpl
- Returns:
- whether this dialect allows an expression in the ORDER BY clause of a UNION (or other set operation) query only if it occurs in the SELECT clause
-
requiresUnionOrderByOrdinal
public boolean requiresUnionOrderByOrdinal()
Description copied from interface:Dialect
Returns true if this dialect allows only integers in the ORDER BY clause of a UNION (or other set operation) query.For example,
SELECT x, y + z FROM t
is allowed but
UNION ALL
SELECT x, y + z FROM t
ORDER BY 1, 2SELECT x, y, z FROM t
is not.
UNION ALL
SELECT x, y, z FROM t
ORDER BY xTeradata is an example of a dialect with this restriction.
- Specified by:
requiresUnionOrderByOrdinal
in interfaceDialect
- Overrides:
requiresUnionOrderByOrdinal
in classJdbcDialectImpl
- Returns:
- whether this dialect allows only integers in the ORDER BY clause of a UNION (or other set operation) query
-
generateInline
public String generateInline(List<String> columnNames, List<String> columnTypes, List<String[]> valueList)
Description copied from interface:Dialect
Generates a SQL statement to represent an inline dataset.For example, for Oracle, generates
SELECT 1 AS FOO, 'a' AS BAR FROM dual UNION ALL SELECT 2 AS FOO, 'b' AS BAR FROM dual
For ANSI SQL, generates:
VALUES (1, 'a'), (2, 'b')
- Specified by:
generateInline
in interfaceDialect
- Overrides:
generateInline
in classJdbcDialectImpl
- Parameters:
columnNames
- List of column namescolumnTypes
- List of column types ("String" or "Numeric")valueList
- List of rows values- Returns:
- SQL string
-
quoteDateLiteral
protected void quoteDateLiteral(StringBuilder buf, String value, Date date)
Description copied from class:JdbcDialectImpl
Helper method forJdbcDialectImpl.quoteDateLiteral(StringBuilder, String)
.- Overrides:
quoteDateLiteral
in classJdbcDialectImpl
- Parameters:
buf
- Buffer to append tovalue
- Value as stringdate
- Value as date
-
generateOrderByNulls
protected String generateOrderByNulls(String expr, boolean ascending, boolean collateNullsLast)
Description copied from class:JdbcDialectImpl
Generates SQL to force null values to collate last.This default implementation makes use of the ANSI SQL 1999 CASE-WHEN-THEN-ELSE in conjunction with IS NULL syntax. The resulting SQL will look something like this:
CASE WHEN "expr" IS NULL THEN 0 ELSE 1 END
You can override this method for a particular database to use something more efficient, like ISNULL().
ANSI SQL provides the syntax "ASC/DESC NULLS LAST" and "ASC/DESC NULLS FIRST". If your database supports the ANSI syntax, implement this method by calling
JdbcDialectImpl.generateOrderByNullsAnsi(java.lang.String, boolean, boolean)
.This method is only called from
JdbcDialectImpl.generateOrderItem(String, boolean, boolean, boolean)
. Some dialects override that method and therefore never call this method.- Overrides:
generateOrderByNulls
in classJdbcDialectImpl
- Parameters:
expr
- Expression.ascending
- Whether ascending.collateNullsLast
- Whether nulls should appear first or last.- Returns:
- Expression to force null values to collate last or first.
-
allowsAs
public boolean allowsAs()
Description copied from interface:Dialect
Returns whether the SQL dialect allows "AS" in the FROM clause. If so, "SELECT * FROM t AS alias" is a valid query.- Specified by:
allowsAs
in interfaceDialect
- Overrides:
allowsAs
in classJdbcDialectImpl
- Returns:
- whether dialect allows AS in FROM clause
-
allowsJoinOn
public boolean allowsJoinOn()
Description copied from interface:Dialect
Returns whether this dialect supports "ANSI-style JOIN syntax",FROM leftTable JOIN rightTable ON conditon
.- Specified by:
allowsJoinOn
in interfaceDialect
- Overrides:
allowsJoinOn
in classJdbcDialectImpl
- Returns:
- Whether this dialect supports FROM-JOIN-ON syntax.
-
quoteTimestampLiteral
public void quoteTimestampLiteral(StringBuilder buf, String value)
Description copied from interface:Dialect
Appends to a buffer a timestamp literal.For example, in the default dialect,
quoteStringLiteral(buf, "1969-03-17 12:34:56")
appendsTIMESTAMP '1969-03-17 12:34:56'
.- Specified by:
quoteTimestampLiteral
in interfaceDialect
- Overrides:
quoteTimestampLiteral
in classJdbcDialectImpl
- Parameters:
buf
- Buffer to append tovalue
- Literal
-
-