| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| config { hasOutput: true, tags: ["tuple", "udfs"] } |
| |
| CREATE OR REPLACE FUNCTION ${self()}(sketchA BYTES, sketchB BYTES, seed INT64, mode STRING) |
| RETURNS BYTES |
| LANGUAGE js |
| OPTIONS ( |
| library=["${dataform.projectConfig.vars.jsBucket}/tuple_sketch_int64.js"], |
| js_parameter_encoding_mode='STANDARD', |
| description = '''Computes a sketch that represents the scalar intersection of sketchA and sketchB. |
| Note that cardinality estimation accuracy, plots, and error tables are the same as the Theta Sketch. |
| This function only applies to Tuple Sketches with an INT64 summary column. |
| |
| Param sketchA: the first sketch "A" as BYTES. |
| Param sketchB: the second sketch "B" as BYTES. |
| Param seed: This is used to confirm that the given sketches were configured with the correct seed. A NULL specifies the default seed = 9001. |
| Returns: a Compact Tuple Sketch as BYTES. |
| |
| For more information: |
| - https://datasketches.apache.org/docs/Tuple/TupleSketches.html |
| ''' |
| ) AS R""" |
| if (sketchA == null || sketchB == null) return null |
| const default_seed = BigInt(Module.DEFAULT_SEED); |
| try { |
| return Module.tupleIntersectionInt64(sketchA, sketchB, seed ? BigInt(seed) : default_seed, mode ? mode : ""); |
| } catch (e) { |
| if (e.message != null) throw e; |
| throw new Error(Module.getExceptionMessage(e)); |
| } |
| """; |