我需要列類型從十進製轉換為日期在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 ?
我將開始調試的記錄,
第一計數null,也許你的進口沒有讀到列一些格式的原因。
Select count(*)從表target_column不是零;
與
Select count(*)從表target_column是零;
如果表是巨大的和成本意義重大,結合上述成一個單一的查詢。
然後抓住幾行
創建testTable select * from sourceTable target_column不是零限製10;
注意限製條款,隻抓幾行。
應該給你什麼是錯誤的,如果有任何與實際的數據導入和你所期望的數據。
select count(*)從prty_cdim load_dt_id不是零;
有732734948的記錄
select count(*)從prty_cdim load_dt_id是零;
0的記錄
創建表testtable select * from prty_cdim load_dt_is不是零限製10;從testtable select count (*);
表testtable成功創建和10行。
選擇從testtable load_dt_id;
load_dt_id
20140419
20140419
. .
20140419
10行
select *從testtable to_date (cast (load_dt_id字符串),'名稱')= date_format (date_sub(當前日期(),1),'名稱');
好的批量玻璃1(不知道這是什麼意思?)。當我點擊批量圖像,這是——“與三角洲加速查詢:該查詢包含一個高度選擇性濾波器。為了提高查詢的性能,將表轉換為三角洲和運行Opmitize ZORDER通過命令在桌子上“違約”testtable”。
我已經嚐試了許多數據功能比較sysdate甚至沒有運氣和10個表中的記錄。有一種方式我可以比較sysdate小數嗎?
即使使用,unix_timestamp from_unixtime和沒有人工作。
為什麼scala sql是不友好的。where子句之後會是什麼樣子在磚:
to_date (trunc (load_dt_id), '名稱')= trunc (sysdate 1);
我試著“trunc (cast (load_dt_id字符串),'名稱')= date_format (date_sub (currentl_date(), 1), '名稱');”
或“
trunc (cast (load_dt_id字符串),'名稱')= trunc (date_sub (currentl_date(), 1), '名稱');
”
他們都沒有工作
您可以運行
“描述表;”一列的數據類型。
我跑了幾個例子,發現下麵的工作,我認為你可能隻是一些格式問題。
探索其中的一些例子,看看你可以找到你的錯誤。
記得刪除你創建任何表如果你是在一個共享工作區。
創建一個表與小數名為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投。