Создать таблицу в Spark SQL не поддерживает не нуль - PullRequest
0 голосов
/ 22 октября 2018

Я выполнил запрос

CREATE TABLE IF NOT EXISTS OMIDimensionshql.DimPrimaryProduct (PrimaryProductKey int, abc STRING, SCDStartDate timestamp NOT NULL, SCDEndDate timestamp, OMIDQFailedFlag boolean, OMIComputeDeletedFlag boolean NOT NULL, OMIComputeCreatedDate timestamp NOT NULL, OMIComputeModifiedDate timestamp NOT NULL ) Using delta LOCATION 'adl://psinsightsadlsdev01.azuredatalakestore.net//PPE/Compute/OMIDimensions/DimPrimaryProductGrouping/Full/'

Используя spark.sql(), но выдает ошибку ниже -

Exception in thread "main" org.apache.spark.sql.catalyst.parser.ParseException: 
no viable alternative at input 'CREATE TABLE IF NOT EXISTS OMIDimensionshql.DimPrimaryProduct (PrimaryProductKey int, abc STRING, SCDStartDate timestamp NOT'(line 1, pos 121)

== SQL ==
CREATE TABLE IF NOT EXISTS OMIDimensionshql.DimPrimaryProduct (PrimaryProductKey int, abc STRING, SCDStartDate timestamp NOT NULL, SCDEndDate timestamp, OMIDQFailedFlag boolean, OMIComputeDeletedFlag boolean NOT NULL, OMIComputeCreatedDate timestamp NOT NULL, OMIComputeModifiedDate timestamp NOT NULL ) Using delta LOCATION 'adl://psinsightsadlsdev01.azuredatalakestore.net//PPE/Compute/OMIDimensions/DimPrimaryProductGrouping/Full/'
-------------------------------------------------------------------------------------------------------------------------^^^

at org.apache.spark.sql.catalyst.parser.ParseException.withCommand(ParseDriver.scala:239)
at org.apache.spark.sql.catalyst.parser.AbstractSqlParser.parse(ParseDriver.scala:115)
at org.apache.spark.sql.execution.SparkSqlParser.parse(SparkSqlParser.scala:48)
at org.apache.spark.sql.catalyst.parser.AbstractSqlParser.parsePlan(ParseDriver.scala:69)
at org.apache.spark.sql.SparkSession.sql(SparkSession.scala:638)
at com.ms.omi.meta.execute.Execute$$anonfun$createSubjectAreaTables$1.apply(Execute.scala:55)
at com.ms.omi.meta.execute.Execute$$anonfun$createSubjectAreaTables$1.apply(Execute.scala:46)
at scala.collection.immutable.List.foreach(List.scala:381)
at com.ms.omi.meta.execute.Execute$.createSubjectAreaTables(Execute.scala:46)
at com.ms.omi.meta.entry.EntOmiMetaStore$.main(EntOmiMetaStore.scala:21)
at com.ms.omi.meta.entry.EntOmiMetaStore.main(EntOmiMetaStore.scala)

Process finished with exit code 1

Когда я выполняю тот же запрос в записной книжке Spark SQL в кластере Databricks, он работает, он просто не работает, когда я выполняю его локально в Scala, используя spark.sql().

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Всего две причины для этого:

  1. У Дельты был недостаток в том же.Если вы используете общий выделенный кластер с Databricks 4.0 или бета-версией ниже 5.0, вы не можете сделать NOT NULL для столбцов в ваших DDL.Если у вас есть доступность к бета-версии 5.0 или 5.0 к официальным версиям, то эти вещи теперь поддерживаются.Ребята из Databricks исправили это в 5.0 Beta и выше вместе с лимитом 10K на MERGE INTO.

  2. Поскольку вы можете захотеть сделать следующее

sql("SET spark.databricks.delta.preview.enabled=true")

sql("SET spark.databricks.delta.merge.joinBasedMerge.enabled = true")

0 голосов
/ 23 октября 2018

NOT NULL ограничения не поддерживаются в стандартной среде выполнения Spark.

База данных использует свою собственную среду выполнения с большим количеством проприетарных расширений, поэтому имеющиеся в ней функции не обязательно доступны в открытом исходном коде.Распределение искр.

На самом деле, другая функция, которую вы пытаетесь использовать, - Databricks Delta - также является проприетарным расширением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...