web-dev-qa-db-fra.com

DATEDIFF dans SPARK SQl

Je suis nouveau sur Spark SQL. Nous migrons des données du serveur SQL vers Databricks. J'utilise SPARK SQL. Pouvez-vous suggérer comment réaliser les fonctionnalités ci-dessous) en SPARK sql pour les fonctions de date ci-dessous. Je peux voir que dateiff ne donne que des jours en spark sql.

DATEDIFF (YEAR, StartDate, EndDate) DATEDIFF (Month, StartDate, EndDate) DATEDIFF (Quarter, StartDate, EndDate)

9
SQLGirl

Comme vous l'avez mentionné, SparkSQL prend en charge DATEDIFF mais pour les jours seulement. Je ferais également attention car il semble que les paramètres soient inversés pour Spark, c'est-à-dire

--SQL Server
DATEDIFF ( datepart , startdate , enddate )

--Spark
DATEDIFF ( enddate , startdate )

Spark prend cependant en charge une fonction similaire appelée months_between que vous pourriez utiliser à la place de DATEDIFF( month .... Cette fonction renvoie également une quantité décimale, vous pouvez donc la caster sur INT pour des fonctionnalités similaires à

SELECT startDate, endDate, 
  DATEDIFF( endDate, startDate ) AS diff_days,
  CAST( months_between( endDate, startDate ) AS INT ) AS diff_months      
FROM yourTable
ORDER BY 1;

Il existe également des fonctions year et quarter pour déterminer respectivement l'année et le trimestre d'une date. Vous pourriez simplement réduire les années, mais les trimestres seraient plus difficiles. Il se peut que vous deviez "faire le calcul" ou finir par utiliser un tableau de calendrier.

7
wBob