{"id":13366,"date":"2024-06-17T15:03:35","date_gmt":"2024-06-17T07:03:35","guid":{"rendered":"https:\/\/nj.transwarp.cn:8180\/?p=13366"},"modified":"2024-06-26T15:26:55","modified_gmt":"2024-06-26T07:26:55","slug":"%e9%92%88%e5%af%b9null%e5%80%bc%e8%ae%a1%e7%ae%97%e5%80%be%e6%96%9c%e7%9a%84%e5%a4%84%e7%90%86","status":"publish","type":"post","link":"https:\/\/kbwp.transwarp.cn\/?p=13366","title":{"rendered":"\u9488\u5bf9 null \u503c\u8ba1\u7b97\u503e\u659c\u7684\u5904\u7406"},"content":{"rendered":"<h3>\u6982\u8981\u63cf\u8ff0<\/h3>\n<p>\u672c\u6587\u4e3b\u8981\u4ecb\u7ecd NULL\u503c\u5f15\u53d1\u7684\u6570\u636e\u503e\u659c\uff0c\u5982\u4f55\u5904\u7406\u3002<\/p>\n<h3>\u8be6\u7ec6\u8bf4\u660e<\/h3>\n<p>\u6211\u4eec\u5148\u4e3e\u4e2a\u7b80\u5355\u7684\u4f8b\u5b50\uff0c\u8bf4\u4e0b NULL \u503c\u6570\u636e\u503e\u659c\u7684\u5177\u4f53\u73b0\u8c61\uff1a<\/p>\n<pre><code class=\"language-sql\">SELECT  \n    a.serialno,a.recipeno,\n    if(b.serialno IS NOT NULL AND substr(orderid,1,1)='C',1,0) AS flag\nFROM ods.ods_hisdb_recipedetail a\nLEFT JOIN ods.ods_hisdb_surgeryinfo b\nON a.docnumber = concat('S',b.serialno) and b.tabletype='mid';<\/code><\/pre>\n<p>\u8bed\u53e5\u6267\u884c\u4e00\u76f4\u5361\u5728common join \u7684stage\u7684\u6700\u540e1\u4e2atask\u4e0a\u9762\uff08\u4e00\u822c\u6765\u8bf4task\u7684index num \u4e3a0\uff09<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/nj.transwarp.cn:8180\/wp-content\/uploads\/2024\/06\/image-1718592603966.png\" alt=\"file\" \/><\/p>\n<p>\u68c0\u67e5\u5de6\u8868joinkey\u5206\u5e03\u60c5\u51b5\uff0cnull\u503c2.7\u4ebf+\uff1a<\/p>\n<pre><code class=\"language-sql\">SELECT docnumber AS jk1,count(*) AS cnt1 \nFROM ods.ods_hisdb_recipedetail a \nWHERE a.tabletype='mid' \nGROUP BY docnumber \nORDER BY 2 DESC LIMIT 10;<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/nj.transwarp.cn:8180\/wp-content\/uploads\/2024\/06\/image-1718592822138.png\" alt=\"file\" \/><\/p>\n<p>\u68c0\u67e5\u53f3\u8868joinkey\u5206\u5e03\u60c5\u51b5\uff0c\u90fd\u662f\u552f\u4e00\u7684\uff1a<\/p>\n<pre><code class=\"language-sql\">SELECT concat('S',b.serialno) AS jk2,count(*) AS cnt2 \nFROM ods.ods_hisdb_surgeryinfo b \nGROUP BY concat('S',b.serialno)  \nORDER BY 2 DESC LIMIT 10;<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/nj.transwarp.cn:8180\/wp-content\/uploads\/2024\/06\/image-1718592879489.png\" alt=\"file\" \/><\/p>\n<h4>\u65b9\u6848\u4e00\uff1a\u6539\u5199sql\uff0c\u4e1a\u52a1\u903b\u8f91\u4e0a\u5254\u9664<\/h4>\n<p>\u548c\u5ba2\u6237\u6c9f\u901a\u4e0b\uff0cjoinkey\u4e3a null \u7684\u6570\u636e\u80fd\u5426\u8fc7\u6ee4\u6389\uff0c\u8fc7\u6ee4\u4e4b\u540e\u662f\u5426\u5f71\u54cd\u4e1a\u52a1\u3002<\/p>\n<p>\u6539\u5199 sql \u65b9\u6848\u4f5c\u4e3a\u9996\u9009\u65b9\u6848\uff0c\u5982\u679c\u5ba2\u6237\u63a5\u53d7\u5c31\u4e0d\u9700\u8981\u4e0b\u9762\u7684\u5907\u9009\u65b9\u6848\u4e86\u3002<\/p>\n<h4>\u65b9\u6848\u4e8c\uff1a skewjoin\uff1a<\/h4>\n<p>Argodb6.0\u7248\u672c\u5f00\u59cb\u652f\u6301skewjoin\u7684\u89e3\u51b3\u65b9\u6848\uff0c<\/p>\n<pre><code class=\"language-sql\">--null\u503e\u659c\u8bbe\u7f6e\u5f00\u5173\uff0c\u9ed8\u8ba4false\nSET quark.join.null.optimize=TRUE;\n--\u975enull\u503e\u659c\u8bbe\u7f6e\u5f00\u5173\uff0c\u9ed8\u8ba4false\uff0c\u542f\u52a8 SKEWJOIN hint \u89e3\u6790\n--SET quark.skewjoin.hint.enable=TRUE;\n--\u6253\u5f00\u53ef\u652f\u6301\u8bfbORC\u8868\uff0c\u9ed8\u8ba4false (\u76ee\u524dlinac\u8fd8\u65e0\u6cd5\u652f\u6301orc\u8868\uff0cwindrunner\u662f\u5b8c\u6574\u652f\u6301orc\u7684)\nSET ngmr.windrunner.session.orc=TRUE;\n--\u5bf9\u975equery\u7c7b\u578b\u7684sql\u5f00\u542fwindrunner\uff0c\u5f00\u542f\u540edelete\/update\/insert\u624d\u4f1a\u8d70\u65b0\u5f15\u64ce\n--SET ngmr.windrunner.nonquery.enabled=TRUE;\n\n--\u518d\u6267\u884csql\u5373\u53ef\uff08sql\u5185\u5bb9\u4e0d\u9700\u8981\u505a\u4fee\u6539\uff09<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/nj.transwarp.cn:8180\/wp-content\/uploads\/2024\/06\/image-1718593240067.png\" alt=\"file\" \/><\/p>\n<h4>\u65b9\u6848\u4e09\uff1a\u5f3a\u5236mapjoin hint (\u614e\u7528)<\/h4>\n<p><strong><font color=red>\u8be5\u65b9\u6848\u4e00\u822c\u9002\u7528\u4e8e\uff0c\u5ba2\u6237\u7740\u6025\u8dd1\u6570\u51fa\u7ed3\u679c\uff0c\u4e8b\u5148\u9700\u8981\u5148\u770b\u4e0b\u5c0f\u8868\u7684hdfs\u5927\u5c0f\uff0c\u8fc7\u5927\u5219\u4e0d\u9002\u5408\u8d70mapjoin\u3002<\/font><\/strong><\/p>\n<p><strong><font color=red>\u6ce8\u610f\uff1ajoin\u4e24\u4fa7\u7684\u8868\u5927\u5c0f\u90fd\u8f83\u5927\u9ed8\u8ba4\u65e0\u6cd5mapjoin\u65f6\uff0c\u4e0d\u5efa\u8bae\u4f7f\u7528\u8be5\u65b9\u6848\u3002 \u53e6\u5916\uff0c\u5982\u679c\u540e\u671f\u8868\u7684\u6570\u636e\u91cf\u53d8\u52a8\uff0c\u6781\u6613\u9020\u6210executor\u5f02\u5e38\uff0c\u6240\u4ee5\u8bf7\u614e\u7528\u3002<\/font><\/strong><\/p>\n<pre><code class=\"language-sql\">SELECT  \n    \/*+ mapjoin(b)*\/ a.serialno,a.recipeno,\n    if(b.serialno IS NOT NULL AND substr(orderid,1,1)='C',1,0) AS flag\nFROM ods.ods_hisdb_recipedetail a\nLEFT JOIN ods.ods_hisdb_surgeryinfo b\nON a.docnumber = concat('S',b.serialno) and b.tabletype='mid';<\/code><\/pre>\n<h4>\u65b9\u6848\u56db\uff1anull\u503c\u8f6c\u6362\u6210\u968f\u673a\u6570<\/h4>\n<p>\u8fd9\u91cc\u4f7f\u7528\u7684\u968f\u673a\u6570\uff0c\u9700\u8981\u4fdd\u8bc1\u65e0\u6cd5\u5339\u914d\u5230\u53e6\u5916\u4e00\u5f20\u8868\u7684joinkey\u3002<\/p>\n<pre><code class=\"language-sql\">SELECT \n    a.serialno,a.recipeno,\n    if(b.serialno IS NOT NULL AND substr(orderid,1,1)='C',1,0) AS flag\nFROM\n    (SELECT \n        --\u8fd9\u91cc\u5176\u5b9e\u4e0d\u5efa\u8bae\u4f7f\u7528*\uff0c\u6211\u4eec\u5efa\u8bae\u53ea\u9009\u53d6\u5916\u5c42\u9700\u8981\u7528\u5230\u7684\u5217\uff0c\u51cf\u5c11\u6570\u636e\u8bfb\u53d6\u8fd4\u56de\n        *,\n        CASE WHEN docnumber IS NOT NULL AND trim(docnumber)!='' THEN docnumber ELSE CONCAT('hive',CAST(rand()*100000 AS INT)) END AS docnumber_forjoin\n    FROM ods.ods_hisdb_recipedetail\n    ) a\nLEFT JOIN ods.ods_hisdb_surgeryinfo b\n--\u6ce8\u610fjoinkey\u5217\u4e5f\u9700\u8981\u5bf9\u5e94\u4fee\u6539\nON a.docnumber_forjoin = concat('S',b.serialno) and b.tabletype='mid'\nWHERE a.tabletype='mid';<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u6982\u8981\u63cf\u8ff0 \u672c\u6587\u4e3b\u8981\u4ecb\u7ecd NULL\u503c\u5f15\u53d1\u7684\u6570\u636e\u503e\u659c\uff0c\u5982\u4f55\u5904\u7406\u3002 \u8be6\u7ec6\u8bf4\u660e \u6211\u4eec\u5148\u4e3e\u4e2a\u7b80\u5355\u7684\u4f8b\u5b50\uff0c\u8bf4\u4e0b NULL  ..<\/p>\n<div class=\"clear-fix\"><\/div>\n<p><a href=\"https:\/\/kbwp.transwarp.cn\/?p=13366\" title=\"read more...\">Read more<\/a><\/p>\n","protected":false},"author":12,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[40],"tags":[],"class_list":["post-13366","post","type-post","status-publish","format-standard","hentry","category-sql_issue"],"acf":[],"_links":{"self":[{"href":"https:\/\/kbwp.transwarp.cn\/index.php?rest_route=\/wp\/v2\/posts\/13366","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kbwp.transwarp.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kbwp.transwarp.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kbwp.transwarp.cn\/index.php?rest_route=\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/kbwp.transwarp.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=13366"}],"version-history":[{"count":4,"href":"https:\/\/kbwp.transwarp.cn\/index.php?rest_route=\/wp\/v2\/posts\/13366\/revisions"}],"predecessor-version":[{"id":13467,"href":"https:\/\/kbwp.transwarp.cn\/index.php?rest_route=\/wp\/v2\/posts\/13366\/revisions\/13467"}],"wp:attachment":[{"href":"https:\/\/kbwp.transwarp.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=13366"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kbwp.transwarp.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=13366"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kbwp.transwarp.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=13366"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}