{"id":5594,"date":"2024-01-12T19:30:52","date_gmt":"2024-01-12T11:30:52","guid":{"rendered":"https:\/\/ixyzero.com\/blog\/?p=5594"},"modified":"2024-01-12T19:30:52","modified_gmt":"2024-01-12T11:30:52","slug":"hive-array_except-genericudf%e7%bc%96%e5%86%99","status":"publish","type":"post","link":"https:\/\/ixyzero.com\/blog\/archives\/5594.html","title":{"rendered":"Hive array_except GenericUDF\u7f16\u5199"},"content":{"rendered":"\n<p>=Start=<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u7f18\u7531\uff1a<\/h4>\n\n\n\n<p>\u7b80\u5355\u6574\u7406\u4e00\u4e0b\u5982\u4f55\u5feb\u901f\u5c06 Apache Hive \u5728 GitHub \u4e0a\u65b0\u52a0\u7684 UDF\/GenericUDF \u4ee3\u7801\u529f\u80fd\u6dfb\u52a0\u5230\u516c\u53f8\u5185\u90e8\u5e73\u53f0\u7684\u529e\u6cd5\uff0c\u65b9\u4fbf\u540e\u9762\u6709\u9700\u8981\u7684\u65f6\u5019\u53c2\u8003\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u6b63\u6587\uff1a<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\">\u53c2\u8003\u89e3\u7b54\uff1a<\/h5>\n\n\n\n<p>\u7528 collect_set \u51fd\u6570\u751f\u6210\u4eca\u5929\u6240\u7528\u7684\u53bb\u91cd\u8bbe\u5907\u6570\u7ec4 array1 \uff1b<br>\u7528 collect_set \u51fd\u6570\u7edf\u8ba1\u8fc7\u53bb 30 \u5929\u6240\u7528\u7684\u53bb\u91cd\u8bbe\u5907\u6570\u7ec4 array2 \uff1b<br>\u7edf\u8ba1\u5728 array1 \u800c\u4e0d\u5728 array2 \u4e2d\u7684\u5143\u7d20\uff0c\u5373\u53ef\u4ee5\u53d1\u73b0\u4eca\u5929\u65b0\u589e\u7684\u8bbe\u5907\u6570\u91cf\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>size(array_except(array1, array2)) &gt; 0\n\nsize(nvl(array_except(array1, array2), array())) &gt; 0<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code># Hive \u5b98\u65b9\u5e76\u6ca1\u6709\u63d0\u4f9b array_except \u8fd9\u4e2a\u51fd\u6570\uff0c\u9700\u8981\u81ea\u5df1\u5199UDF\u6765\u5b9e\u73b0\u3002\u4f46\u662f\u5728 GitHub \u4ed3\u5e93\u91cc\u6709\u4e00\u4e2a GenericUDFArrayExcept \u7684UDF\u6837\u4f8b\u53ef\u4ee5\u53c2\u8003\u4e00\u4e0b\u3002\n\nHive ARRAY_EXCEPT \u662f Hive \u4e2d\u7684\u4e00\u4e2a\u5185\u7f6e\u51fd\u6570\uff0c\u5b83\u53ef\u4ee5\u5728\u4e24\u4e2a\u6570\u7ec4\u4e4b\u95f4\u6267\u884c\u5dee\u96c6\u64cd\u4f5c\u3002\u5b83\u8fd4\u56de\u4e00\u4e2a\u65b0\u7684\u6570\u7ec4\uff0c\u5176\u4e2d\u5305\u542b\u4e86\u7b2c\u4e00\u4e2a\u6570\u7ec4\u4e2d\u4e0d\u5b58\u5728\u4e8e\u7b2c\u4e8c\u4e2a\u6570\u7ec4\u4e2d\u7684\u5143\u7d20\u3002\n\n\u8bed\u6cd5\u5982\u4e0b\uff1a\nARRAY array_except(ARRAY a1, ARRAY a2)\n\n\u5176\u4e2d\uff0ca1 \u548c a2 \u662f\u9700\u8981\u8fdb\u884c\u5dee\u96c6\u64cd\u4f5c\u7684\u4e24\u4e2a\u6570\u7ec4\uff0c\u800c T \u662f\u6570\u7ec4\u5143\u7d20\u7684\u6570\u636e\u7c7b\u578b\u3002\n\n\u793a\u4f8b\uff1a\nselect array_except(array(1, 2, 3), array(2, 3, 4)) as result;\n\n\u7ed3\u679c\uff1a\n&#91;1]<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>\u4e00\u5f00\u59cb\u5176\u5b9e\u6ca1\u6709\u51c6\u5907\u5b8c\u5168**\u76f4\u63a5**\u7528Hive\u4ed3\u5e93\u7684\u90a3\u6bb5\u4ee3\u7801\u7684\uff0c\u53ea\u662f\u60f3\u501f\u52a9\u90a3\u6bb5\u4ee3\u7801\u518d\u719f\u6089\u548c\u53c2\u8003\u4e00\u4e0b Hive GenericUDF \u7684\u5199\u6cd5\uff0c\u56e0\u4e3a\u7528Java\u5b9e\u73b0array\u4e4b\u95f4\u7684\u5dee\u96c6\u64cd\u4f5c\u7684\u903b\u8f91\u672c\u8eab\u5e76\u4e0d\u590d\u6742\uff0c\u53ea\u662f GenericUDF \u7f16\u5199\u89c4\u8303\u91cc\u7684\u4e00\u4e9b ObjectInspector \u53d8\u91cf\u7684\u5904\u7406\u548c\u7279\u5b9a\u51fd\u6570\u7684\u4f7f\u7528\u4e0d\u592a\u719f\u6089\uff0c\u60f3\u8d81\u7740\u8fd9\u4e2a\u673a\u4f1a\u719f\u6089\u4e00\u4e0b\uff0c\u4f46\u662f\u53d1\u73b0 Hive \u7684\u8fd9\u4e9b\u4ee3\u7801\u91cc\u6709\u51e0\u5c42\u5c01\u88c5\uff08`GenericUDFArrayExcept`\u7ee7\u627f\u81ea`AbstractGenericUDFArrayBase`\u800c\u975e\u76f4\u63a5\u7ee7\u627f`GenericUDF`\uff0c\u53e6\u5916\u4ee3\u7801\u4e2d\u4e5f\u7528\u5230\u4e86`GenericUDFUtils`\u7684\u4e00\u4e9b\u5c01\u88c5\uff09\uff0c\u4ece\u5934\u719f\u6089\u548c\u7406\u89e3\u8981\u82b1\u4e9b\u65f6\u95f4\uff08\u521a\u597d\u53c8\u6709\u70b9\u4e8b\u60c5\u8981\u5904\u7406\uff09\uff0c\u7b97\u4e86\uff0c\u5148\u628a\u6574\u4f53\u6d41\u7a0b\u8dd1\u901a\u518d\u8bf4\u3002\u540e\u9762\u5982\u679c\u529f\u80fd\u5b9e\u73b0\u6709\u7d27\u6025\u9700\u6c42\u7684\u8bdd\u4e5f\u53ef\u4ee5\u4f7f\u7528\u8fd9\u79cd\u5feb\u901f\u7684\u65b9\u6cd5\u3002\n\nGenericUDFUtils.java\nAbstractGenericUDFArrayBase.java\nGenericUDFArrayExcept.java\n\n\u6700\u7b80\u5355\u7684\u529e\u6cd5\u5c31\u662f\u4e0b\u8f7d\u4e0a\u9762 3 \u4e2a\u6587\u4ef6\uff0c\u7136\u540e\u76f4\u63a5\u62f7\u8d1d\u5230\u4f60\u5bf9\u5e94\u7684\u76ee\u5f55\u4e0b\u9762\u3002\u7136\u540e\u5bf9\u5e94\u6539\u4e00\u4e0bJava\u6587\u4ef6\u91cc\u9762\u7684 package \u4fe1\u606f\u5c31\u597d\uff0c\u5176\u5b83\u7684\u4e0d\u7528\u52a8\u3002\u7136\u540e\u6309\u516c\u53f8\u89c4\u8303\u751f\u6210jar\u5305\u4e0a\u4f20\u81f3\u76f8\u5173\u5e73\u53f0\uff0c\u4e4b\u540e\u6b63\u5e38\u4f7f\u7528\u5373\u53ef\u3002\n\nhive&gt; add jar \/path\/to\/ixyzero-udf.jar;\nhive&gt; create temporary function array_except as 'com.ixyzero.hive.udf.GenericUDFArrayExcept';\nhive&gt; SELECT array_except(array(1,2,3,4), array(2,3));\n&#91;1,4]<\/code><\/pre>\n\n\n\n<p>\u7ffb\u4e00\u7ffb\u4ed3\u5e93\u91cc\u9762\u8fd8\u6709\u54ea\u4e9b\u5176\u5b83\u529f\u80fd\u7684\u4ee3\u7801\uff0c\u540e\u9762\u6709\u9700\u8981\u7684\u65f6\u5019\u53ef\u4ee5\u76f4\u63a5\u62ff\u6765\u7528\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ grep \"Description(name = \" -A5 hive\/ql\/src\/java\/org\/apache\/hadoop\/hive\/ql\/udf\/generic\/*.java\n\n$ ls -l hive\/ql\/src\/java\/org\/apache\/hadoop\/hive\/ql\/udf\/generic\n\ngeneric\/AbstractGenericUDAFResolver.java\ngeneric\/AbstractGenericUDFArrayBase.java\ngeneric\/AbstractGenericUDFReflect.java\ngeneric\/BaseMaskUDF.java\ngeneric\/Collector.java\ngeneric\/GenericUDAFApproximateDistinct.java\ngeneric\/GenericUDAFAverage.java\ngeneric\/GenericUDAFBinarySetFunctions.java\ngeneric\/GenericUDAFBloomFilter.java\ngeneric\/GenericUDAFBridge.java\ngeneric\/GenericUDAFCollectList.java\ngeneric\/GenericUDAFCollectSet.java\ngeneric\/GenericUDAFComputeBitVectorBase.java\ngeneric\/GenericUDAFComputeBitVectorFMSketch.java\ngeneric\/GenericUDAFComputeBitVectorHLL.java\ngeneric\/GenericUDAFComputeStats.java\ngeneric\/GenericUDAFContextNGrams.java\ngeneric\/GenericUDAFCorrelation.java\ngeneric\/GenericUDAFCount.java\ngeneric\/GenericUDAFCovariance.java\ngeneric\/GenericUDAFCovarianceSample.java\ngeneric\/GenericUDAFCumeDist.java\ngeneric\/GenericUDAFDenseRank.java\ngeneric\/GenericUDAFEvaluator.java\ngeneric\/GenericUDAFExceptionInVertex.java\ngeneric\/GenericUDAFFirstValue.java\ngeneric\/GenericUDAFHistogramNumeric.java\ngeneric\/GenericUDAFLag.java\ngeneric\/GenericUDAFLastValue.java\ngeneric\/GenericUDAFLead.java\ngeneric\/GenericUDAFLeadLag.java\ngeneric\/GenericUDAFMax.java\ngeneric\/GenericUDAFMin.java\ngeneric\/GenericUDAFMkCollectionEvaluator.java\ngeneric\/GenericUDAFNTile.java\ngeneric\/GenericUDAFParameterInfo.java\ngeneric\/GenericUDAFPercentRank.java\ngeneric\/GenericUDAFPercentileApprox.java\ngeneric\/GenericUDAFPercentileCont.java\ngeneric\/GenericUDAFPercentileDisc.java\ngeneric\/GenericUDAFRank.java\ngeneric\/GenericUDAFResolver.java\ngeneric\/GenericUDAFResolver2.java\ngeneric\/GenericUDAFRowNumber.java\ngeneric\/GenericUDAFStd.java\ngeneric\/GenericUDAFStdSample.java\ngeneric\/GenericUDAFStreamingEvaluator.java\ngeneric\/GenericUDAFSum.java\ngeneric\/GenericUDAFSumEmptyIsZero.java\ngeneric\/GenericUDAFVariance.java\ngeneric\/GenericUDAFVarianceSample.java\ngeneric\/GenericUDAFnGrams.java\ngeneric\/GenericUDF.java\ngeneric\/GenericUDFAbs.java\ngeneric\/GenericUDFAddMonths.java\ngeneric\/GenericUDFAesBase.java\ngeneric\/GenericUDFAesDecrypt.java\ngeneric\/GenericUDFAesEncrypt.java\ngeneric\/GenericUDFArray.java\ngeneric\/GenericUDFArrayContains.java\ngeneric\/GenericUDFArrayDistinct.java\ngeneric\/GenericUDFArrayExcept.java\ngeneric\/GenericUDFArrayIntersect.java\ngeneric\/GenericUDFArrayJoin.java\ngeneric\/GenericUDFArrayMax.java\ngeneric\/GenericUDFArrayMin.java\ngeneric\/GenericUDFArrayRemove.java\ngeneric\/GenericUDFArraySlice.java\ngeneric\/GenericUDFArrayUnion.java\ngeneric\/GenericUDFAssertTrue.java\ngeneric\/GenericUDFAssertTrueOOM.java\ngeneric\/GenericUDFBRound.java\ngeneric\/GenericUDFBaseArithmetic.java\ngeneric\/GenericUDFBaseBinary.java\ngeneric\/GenericUDFBaseCompare.java\ngeneric\/GenericUDFBaseDTI.java\ngeneric\/GenericUDFBaseNumeric.java\ngeneric\/GenericUDFBaseNwayCompare.java\ngeneric\/GenericUDFBasePad.java\ngeneric\/GenericUDFBaseTrim.java\ngeneric\/GenericUDFBaseUnary.java\ngeneric\/GenericUDFBetween.java\ngeneric\/GenericUDFBridge.java\ngeneric\/GenericUDFBucketNumber.java\ngeneric\/GenericUDFCardinalityViolation.java\ngeneric\/GenericUDFCase.java\ngeneric\/GenericUDFCastFormat.java\ngeneric\/GenericUDFCbrt.java\ngeneric\/GenericUDFCeil.java\ngeneric\/GenericUDFCharacterLength.java\ngeneric\/GenericUDFCoalesce.java\ngeneric\/GenericUDFConcat.java\ngeneric\/GenericUDFConcatWS.java\ngeneric\/GenericUDFCurrentAuthorizer.java\ngeneric\/GenericUDFCurrentCatalog.java\ngeneric\/GenericUDFCurrentDatabase.java\ngeneric\/GenericUDFCurrentDate.java\ngeneric\/GenericUDFCurrentGroups.java\ngeneric\/GenericUDFCurrentSchema.java\ngeneric\/GenericUDFCurrentTimestamp.java\ngeneric\/GenericUDFCurrentUser.java\ngeneric\/GenericUDFDate.java\ngeneric\/GenericUDFDateAdd.java\ngeneric\/GenericUDFDateDiff.java\ngeneric\/GenericUDFDateFormat.java\ngeneric\/GenericUDFDateSub.java\ngeneric\/GenericUDFDatetimeLegacyHybridCalendar.java\ngeneric\/GenericUDFDecode.java\ngeneric\/GenericUDFDeserialize.java\ngeneric\/GenericUDFElt.java\ngeneric\/GenericUDFEncode.java\ngeneric\/GenericUDFEnforceConstraint.java\ngeneric\/GenericUDFEpochMilli.java\ngeneric\/GenericUDFExceptionInVertex.java\ngeneric\/GenericUDFExtractUnion.java\ngeneric\/GenericUDFFactorial.java\ngeneric\/GenericUDFField.java\ngeneric\/GenericUDFFloor.java\ngeneric\/GenericUDFFloorCeilBase.java\ngeneric\/GenericUDFFormatNumber.java\ngeneric\/GenericUDFFromUnixTime.java\ngeneric\/GenericUDFFromUtcTimestamp.java\ngeneric\/GenericUDFGreatest.java\ngeneric\/GenericUDFGrouping.java\ngeneric\/GenericUDFHash.java\ngeneric\/GenericUDFIf.java\ngeneric\/GenericUDFIn.java\ngeneric\/GenericUDFInBloomFilter.java\ngeneric\/GenericUDFInFile.java\ngeneric\/GenericUDFIndex.java\ngeneric\/GenericUDFInitCap.java\ngeneric\/GenericUDFInstr.java\ngeneric\/GenericUDFInternalInterval.java\ngeneric\/GenericUDFJsonRead.java\ngeneric\/GenericUDFLTrim.java\ngeneric\/GenericUDFLag.java\ngeneric\/GenericUDFLastDay.java\ngeneric\/GenericUDFLead.java\ngeneric\/GenericUDFLeadLag.java\ngeneric\/GenericUDFLeast.java\ngeneric\/GenericUDFLength.java\ngeneric\/GenericUDFLevenshtein.java\ngeneric\/GenericUDFLikeAll.java\ngeneric\/GenericUDFLikeAny.java\ngeneric\/GenericUDFLocate.java\ngeneric\/GenericUDFLoggedInUser.java\ngeneric\/GenericUDFLower.java\ngeneric\/GenericUDFLpad.java\ngeneric\/GenericUDFMacro.java\ngeneric\/GenericUDFMap.java\ngeneric\/GenericUDFMapKeys.java\ngeneric\/GenericUDFMapValues.java\ngeneric\/GenericUDFMask.java\ngeneric\/GenericUDFMaskFirstN.java\ngeneric\/GenericUDFMaskHash.java\ngeneric\/GenericUDFMaskLastN.java\ngeneric\/GenericUDFMaskShowFirstN.java\ngeneric\/GenericUDFMaskShowLastN.java\ngeneric\/GenericUDFMonthsBetween.java\ngeneric\/GenericUDFMurmurHash.java\ngeneric\/GenericUDFNDVComputeBitVector.java\ngeneric\/GenericUDFNamedStruct.java\ngeneric\/GenericUDFNextDay.java\ngeneric\/GenericUDFNullif.java\ngeneric\/GenericUDFOPAnd.java\ngeneric\/GenericUDFOPDTIMinus.java\ngeneric\/GenericUDFOPDTIPlus.java\ngeneric\/GenericUDFOPDivide.java\ngeneric\/GenericUDFOPEqual.java\ngeneric\/GenericUDFOPEqualNS.java\ngeneric\/GenericUDFOPEqualOrGreaterThan.java\ngeneric\/GenericUDFOPEqualOrLessThan.java\ngeneric\/GenericUDFOPFalse.java\ngeneric\/GenericUDFOPGreaterThan.java\ngeneric\/GenericUDFOPLessThan.java\ngeneric\/GenericUDFOPMinus.java\ngeneric\/GenericUDFOPMod.java\ngeneric\/GenericUDFOPMultiply.java\ngeneric\/GenericUDFOPNegative.java\ngeneric\/GenericUDFOPNot.java\ngeneric\/GenericUDFOPNotEqual.java\ngeneric\/GenericUDFOPNotEqualNS.java\ngeneric\/GenericUDFOPNotFalse.java\ngeneric\/GenericUDFOPNotNull.java\ngeneric\/GenericUDFOPNotTrue.java\ngeneric\/GenericUDFOPNull.java\ngeneric\/GenericUDFOPNumericMinus.java\ngeneric\/GenericUDFOPNumericPlus.java\ngeneric\/GenericUDFOPOr.java\ngeneric\/GenericUDFOPPlus.java\ngeneric\/GenericUDFOPPositive.java\ngeneric\/GenericUDFOPScaleUpDecimal64.java\ngeneric\/GenericUDFOPTrue.java\ngeneric\/GenericUDFOctetLength.java\ngeneric\/GenericUDFParamUtils.java\ngeneric\/GenericUDFPosMod.java\ngeneric\/GenericUDFPower.java\ngeneric\/GenericUDFPrintf.java\ngeneric\/GenericUDFQuarter.java\ngeneric\/GenericUDFQuote.java\ngeneric\/GenericUDFRTrim.java\ngeneric\/GenericUDFReflect.java\ngeneric\/GenericUDFReflect2.java\ngeneric\/GenericUDFRegExp.java\ngeneric\/GenericUDFRestrictInformationSchema.java\ngeneric\/GenericUDFRound.java\ngeneric\/GenericUDFRpad.java\ngeneric\/GenericUDFSQCountCheck.java\ngeneric\/GenericUDFSentences.java\ngeneric\/GenericUDFSha2.java\ngeneric\/GenericUDFSize.java\ngeneric\/GenericUDFSortArray.java\ngeneric\/GenericUDFSortArrayByField.java\ngeneric\/GenericUDFSoundex.java\ngeneric\/GenericUDFSplit.java\ngeneric\/GenericUDFStringToMap.java\ngeneric\/GenericUDFStringToPrivilege.java\ngeneric\/GenericUDFStruct.java\ngeneric\/GenericUDFStructField.java\ngeneric\/GenericUDFSubstringIndex.java\ngeneric\/GenericUDFSurrogateKey.java\ngeneric\/GenericUDFTimestamp.java\ngeneric\/GenericUDFToArray.java\ngeneric\/GenericUDFToBinary.java\ngeneric\/GenericUDFToChar.java\ngeneric\/GenericUDFToDate.java\ngeneric\/GenericUDFToDecimal.java\ngeneric\/GenericUDFToIntervalDayTime.java\ngeneric\/GenericUDFToIntervalYearMonth.java\ngeneric\/GenericUDFToMap.java\ngeneric\/GenericUDFToString.java\ngeneric\/GenericUDFToStruct.java\ngeneric\/GenericUDFToTimestampLocalTZ.java\ngeneric\/GenericUDFToUnixTimeStamp.java\ngeneric\/GenericUDFToUtcTimestamp.java\ngeneric\/GenericUDFToVarchar.java\ngeneric\/GenericUDFTranslate.java\ngeneric\/GenericUDFTrim.java\ngeneric\/GenericUDFTrunc.java\ngeneric\/GenericUDFTumbledWindow.java\ngeneric\/GenericUDFTypeOf.java\ngeneric\/GenericUDFUnion.java\ngeneric\/GenericUDFUnixTimeStamp.java\ngeneric\/GenericUDFUpper.java\ngeneric\/GenericUDFUtils.java\ngeneric\/GenericUDFValidateAcidSortOrder.java\ngeneric\/GenericUDFWhen.java\ngeneric\/GenericUDFWidthBucket.java\ngeneric\/GenericUDTF.java\ngeneric\/GenericUDTFExplode.java\ngeneric\/GenericUDTFGetSQLSchema.java\ngeneric\/GenericUDTFGetSplits.java\ngeneric\/GenericUDTFGetSplits2.java\ngeneric\/GenericUDTFInline.java\ngeneric\/GenericUDTFJSONTuple.java\ngeneric\/GenericUDTFParseUrlTuple.java\ngeneric\/GenericUDTFPosExplode.java\ngeneric\/GenericUDTFReplicateRows.java\ngeneric\/GenericUDTFStack.java\ngeneric\/ISupportStreamingModeForWindowing.java\ngeneric\/InstantDateTimeFormatter.java\ngeneric\/InstantFormatter.java\ngeneric\/InstantFormatterCache.java\ngeneric\/InstantSimpleDateFormatter.java\ngeneric\/LeadLagBuffer.java\ngeneric\/NDV.java\ngeneric\/NGramEstimator.java\ngeneric\/NumericHistogram.java\ngeneric\/RoundUtils.java\ngeneric\/SimpleGenericUDAFParameterInfo.java\ngeneric\/UDTFCollector.java\ngeneric\/package-info.java<\/code><\/pre>\n\n\n\n<h5 class=\"wp-block-heading\">\u53c2\u8003\u94fe\u63a5\uff1a<\/h5>\n\n\n\n<p>Hive SQL\u4e2d\u5982\u4f55\u5224\u65ad\u67d0\u4e2a\u8bbe\u5907\u5c5e\u4e8e\u65b0\u8bbe\u5907\uff1f<br><a href=\"https:\/\/ixyzero.com\/blog\/archives\/5368.html\">https:\/\/ixyzero.com\/blog\/archives\/5368.html<\/a><\/p>\n\n\n\n<p>hive array_except<br><a href=\"https:\/\/juejin.cn\/s\/hive%20array_except\">https:\/\/juejin.cn\/s\/hive%20array_except<\/a><\/p>\n\n\n\n<p>GenericUDFUtils.java<br><a href=\"https:\/\/github.com\/apache\/hive\/blob\/master\/ql\/src\/java\/org\/apache\/hadoop\/hive\/ql\/udf\/generic\/GenericUDFUtils.java\">https:\/\/github.com\/apache\/hive\/blob\/master\/ql\/src\/java\/org\/apache\/hadoop\/hive\/ql\/udf\/generic\/GenericUDFUtils.java<\/a><\/p>\n\n\n\n<p>AbstractGenericUDFArrayBase.java<br><a href=\"https:\/\/github.com\/apache\/hive\/blob\/master\/ql\/src\/java\/org\/apache\/hadoop\/hive\/ql\/udf\/generic\/AbstractGenericUDFArrayBase.java\">https:\/\/github.com\/apache\/hive\/blob\/master\/ql\/src\/java\/org\/apache\/hadoop\/hive\/ql\/udf\/generic\/AbstractGenericUDFArrayBase.java<\/a><\/p>\n\n\n\n<p>GenericUDFArrayExcept.java<br><a href=\"https:\/\/github.com\/apache\/hive\/blob\/master\/ql\/src\/java\/org\/apache\/hadoop\/hive\/ql\/udf\/generic\/GenericUDFArrayExcept.java#L38\">https:\/\/github.com\/apache\/hive\/blob\/master\/ql\/src\/java\/org\/apache\/hadoop\/hive\/ql\/udf\/generic\/GenericUDFArrayExcept.java#L38<\/a><\/p>\n\n\n\n<p>\u6570\u7ec4\u51fd\u6570\u548c\u8fd0\u7b97\u7b26<br><a href=\"https:\/\/www.alibabacloud.com\/help\/zh\/sls\/user-guide\/array-functions-and-operators\">https:\/\/www.alibabacloud.com\/help\/zh\/sls\/user-guide\/array-functions-and-operators<\/a><\/p>\n\n\n\n<p>\u590d\u6742\u7c7b\u578b\u51fd\u6570<br><a href=\"https:\/\/help.aliyun.com\/zh\/maxcompute\/user-guide\/complex-type-functions#section-e0m-o6l-r0k\">https:\/\/help.aliyun.com\/zh\/maxcompute\/user-guide\/complex-type-functions#section-e0m-o6l-r0k<\/a><\/p>\n\n\n\n<p>hive udf\u51fd\u6570 array_except \u5b9e\u73b0<br><a href=\"https:\/\/blog.csdn.net\/qq_35515661\/article\/details\/130161544\">https:\/\/blog.csdn.net\/qq_35515661\/article\/details\/130161544<\/a><\/p>\n\n\n\n<p>spark sql \u51fd\u6570 array_except(arr1,arr2)\u80fd\u5426\u786e\u4fddarr1\u4e2d\u539f\u6709\u5143\u7d20\u7684\u987a\u5e8f<br><a href=\"https:\/\/blog.csdn.net\/qq_35515661\/article\/details\/130141316\">https:\/\/blog.csdn.net\/qq_35515661\/article\/details\/130141316<\/a><\/p>\n\n\n\n<p>Hive GenericUDF \u7684\u4e00\u4e2a\u7b80\u5355\u6837\u4f8b<br><a href=\"https:\/\/ixyzero.com\/blog\/archives\/5432.html\">https:\/\/ixyzero.com\/blog\/archives\/5432.html<\/a><\/p>\n\n\n\n<p>Find elements which are present in first array and not in second<br><a href=\"https:\/\/www.geeksforgeeks.org\/find-elements-present-first-array-not-second\/\">https:\/\/www.geeksforgeeks.org\/find-elements-present-first-array-not-second\/<\/a><\/p>\n\n\n\n<p>Finding if an array contains all elements in another array<br><a href=\"https:\/\/stackoverflow.com\/questions\/16524709\/finding-if-an-array-contains-all-elements-in-another-array\">https:\/\/stackoverflow.com\/questions\/16524709\/finding-if-an-array-contains-all-elements-in-another-array<\/a><\/p>\n\n\n\n<p>java: check if any element in array 1 is present in array 2<br><a href=\"https:\/\/stackoverflow.com\/questions\/57000384\/java-check-if-any-element-in-array-1-is-present-in-array-2\">https:\/\/stackoverflow.com\/questions\/57000384\/java-check-if-any-element-in-array-1-is-present-in-array-2<\/a><\/p>\n\n\n\n<p>=END=<\/p>\n","protected":false},"excerpt":{"rendered":"<p>=Start= \u7f18\u7531\uff1a \u7b80\u5355\u6574\u7406\u4e00\u4e0b\u5982\u4f55\u5feb\u901f\u5c06 Apache Hive \u5728 GitHub \u4e0a\u65b0\u52a0\u7684 UDF\/G [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14,23,7],"tags":[2115,1939,1261,1262,19,2116,1560],"class_list":["post-5594","post","type-post","status-publish","format-standard","hentry","category-database","category-knowledgebase-2","category-programing","tag-array_except","tag-genericudf","tag-hive","tag-sql","tag-tips","tag-toolkit","tag-udf"],"views":1806,"_links":{"self":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts\/5594","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/comments?post=5594"}],"version-history":[{"count":1,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts\/5594\/revisions"}],"predecessor-version":[{"id":5595,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts\/5594\/revisions\/5595"}],"wp:attachment":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/media?parent=5594"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/categories?post=5594"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/tags?post=5594"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}