我需要列類型從十進製轉換為日期在sparksql格式不是yyyy-mm-dd ?
一個表包含列數據聲明為十進製(38歲,0)和數據名稱格式,我無法在databrick筆記本上運行sql查詢。
我曾經嚐試過to_date (column_name) = date_sub(當前日期(),1),它不工作。我試過了,”from_unixtime (cast (column_name字符串),“yyyy-MM-dd”)或to_date (cast (unix_timestamp (column_name, yyyy-MM-dd”),他們都沒有工作。From_unixtime (cast (column_name字符串),“yyyy-mm-dd”,它給我正確的格式但這些數據表中不存在。
我怎麼能把這列類型日期在sql ?
您可以運行
“描述表;”一列的數據類型。
我跑了幾個例子,發現下麵的工作,我認為你可能隻是一些格式問題。
探索其中的一些例子,看看你可以找到你的錯誤。
記得刪除你創建任何表如果你是在一個共享工作區。
創建一個表與小數名為id列。
創建表temp6(選擇20140419.00 id);
描述temp6;
——顯示它確實是一個小數
選擇,注意sql處理int浮動
%的sql select * from temp6 id = 20140419;
也為你投下字符串
%的sql select * from temp6 id =“20140419”;
相同的整數使用嗎
創建表temp7(選擇20140419 id);
這最後一個例子可能會讓你接近,
select *從temp6 id <替換(cast(當前日期()作為字符串),“-”);
分解,通過運行
選擇當前日期()
然後把字符串
選擇演員(當前日期()作為字符串);
然後把破折號
選擇替換((當前日期()作為字符串),“-”)
然後在where子句中使用的,但根據需要修改以適合您的邏輯。
注意我的工作當我整數或小數相比一個字符串,sparkSQL投。
這是一個工作示例,
在SQL中,
創建表temp1(選擇20010101.00日期);
——這將創建一個表與單個列命名為“日期”,小數的數據類型。
——驗證運行“描述temp1”;
to_date函數接受一個字符串作為輸入,所以首先把十進製轉換字符串。
選擇演員從temp1(日期字符串);
一旦你有了一個字符串可以推動一個日期,
選擇to_date(鑄造(日期字符串),“名稱”)從temp1日期;
你可以做同樣的使用dataframe api。
df1 =火花。sql(“選擇20010101.00日期”)
轉換為字符串
df2 = df1.select (df1.date.cast(“字符串”))
下降的小數
從pyspark.sql。功能導入substring_index
df3 = df2.select (substring_index (df2。目前為止,”。',1).alias(日期))
將字符串轉換為日期
從pyspark.sql。功能導入to_date
df4 = df3。選擇(to_date(“日期”、“名稱”).alias(日期))
我和輸出仍= 0。
* column_name load_dt_id
select count(*)從table_name to_date ((load_dt_id字符串),'名稱')= date_format (date_sub(), 1), '名稱');
有7億條記錄和計數不能0如果load_dt_id sysdate 1。
從甲骨文數至少5億如果load_dt_id sysdate 1。