Google bigquery BigQueryURL解码
在BigQuery语言中有没有一种简单的URL解码方法?我正在处理一个表,该表有一列,其中包含一些值中的URL编码字符串。例如:Google bigquery BigQueryURL解码,google-bigquery,Google Bigquery,在BigQuery语言中有没有一种简单的URL解码方法?我正在处理一个表,该表有一列,其中包含一些值中的URL编码字符串。例如: http://xyz.com/example.php?url=http%3A%2F%2Fwww.example.com%2Fhello%3Fv%3D12345&foo=bar&abc=xyz 我提取url参数,如下所示: SELECT REGEXP_EXTRACT(column_name, "url=([^&]+)") as url fro
http://xyz.com/example.php?url=http%3A%2F%2Fwww.example.com%2Fhello%3Fv%3D12345&foo=bar&abc=xyz
我提取url参数,如下所示:
SELECT REGEXP_EXTRACT(column_name, "url=([^&]+)") as url
from [mydataset.mytable]
这给了我:
http%3A%2F%2Fwww.example.com%2Fhello%3Fv%3D12345
我想做的是:
SELECT URL_DECODE(REGEXP_EXTRACT(column_name, "url=([^&]+)")) as url
from [mydataset.mytable]
因此,返回:
http://www.example.com/hello?v=12345
我希望避免使用多个REGEXP\u REPLACE语句替换%20、%3A等。。。如果可能的话
想法?这是一个很好的功能请求,但目前没有内置的BigQuery函数提供URL解码。另一个解决方法是使用用户定义的函数 标准SQL 创建临时函数URL\u解码字符串 返回字符串 语言JSAS 试试{ 返回decodeURIenc;; }捕获e{returnnull} 返回null; ; 选择ven_会话, URL_DECODEREGEXP_EXTRACTpara,r'&kw=\w |[^&]*'作为q 来自raas_system.weblog_20170327 其中类似“%$kw=%”的参数 限制10
我同意这里的每个人的观点,URLDECODE应该是一个本机函数。但是,在此之前,可以编写本机URLDECODE: 从选择中选择id、安全\u将\u字节\u转换为\u字符串数组\u转换为\u字符串,b 身份证件 数组_AGGCASE 当REGEXP_CONTAINSy时,r^%,然后从_HEXSUBSTRy,2 否则以字节形式显示 以ps的形式结束订单 从SELECT x AS id,REGEXP_EXTRACT_ALLx,r%[0-9a-fA-F]{2}[^%]+作为UNNESTARRAY的元素['domodossola%e2%80%93locarno railway','gabu%c5%82t%c3%b3w']作为x作为x 将UNNESTx.element交叉连接为y,偏移量为i按id分组; 在本例中,我尝试并测试了使用来自Wikipedia的两个百分比编码的页面名称作为输入的实现。它也应该与您的输入一起工作 显然,这是非常笨拙的!出于这个原因,我建议构建一个物化连接表,或者将其包装到视图中,而不是在查询中使用这个表达式。然而,它似乎确实完成了任务,并且没有达到UDF的限制
EDIT:将这个繁琐的实现包装成一个漂亮、整洁的小sqludf。这是一个更好的处理方法 下面是在@sigpwned answer的基础上构建的,但是稍微进行了重构,并用SQL UDF进行了包装,它没有JS UDF安全使用的限制 标准SQL 创建临时函数urldecateurl字符串作为 选择安全\u将\u字节\u转换为\u字符串 数组\u到字符串数组\u AGG 如果以y开头,从y开始,“%”,从x开始,2,按i的字节顺序排列 B 从UNNESTREGEXP_EXTRACT_ALLurl,r%[0-9a-fA-F]{2}|[^%]+作为y,偏移量作为i ; 选择 列名称, URLDECODEREGEXP_EXTRACTcolumn_名称,url=[^&]+作为url 来自“project.dataset.table”` 可通过以下问题中的示例进行测试 标准SQL 创建临时函数urldecateurl字符串作为 选择安全\u将\u字节\u转换为\u字符串 数组\u到字符串数组\u AGG 如果以y开头,从y开始,“%”,从x开始,2,按i的字节顺序排列 B 从UNNESTREGEXP_EXTRACT_ALLurl,r%[0-9a-fA-F]{2}|[^%]+作为y,偏移量作为i ; 将'project.dataset.table'作为 选择'http://example.com/example.php?url=http%3A%2F%2Fwww.example.com%2Fhello%3Fv%3D12345&foo=bar&abc=xyz“列名称” 选择 URLDECODEREGEXP_-EXTRACTcolumn_名称,url=[^&]+作为url, 列名 来自“project.dataset.table” 结果 行url列名称 1.http://www.example.com/hello?v=12345 http://example.com/example.php?url=http%3A%2F%2Fwww.example.com%2Fhello%3Fv%3D12345&foo=bar&abc=xyz 使用进一步优化的SQL UDF进行更新 创建临时函数urldecateurl字符串作为 选择字符串\u AGG 如果regexp_CONTAINSy,r'^%[0-9a-fA-F]{2}, 安全\u将\u字节\u转换为\u字符串,从\u HEXREPLACEy,“%”,y, 我点的菜 从UNNESTREGEXP_EXTRACT_ALLurl,r%[0-9a-fA-F]{2}?:%[0-9a-fA-F]{2}*.[^%]+y 用我的偏移量 ;
是否有此功能请求的链接?谢谢!作为SQLUDF的良好包装!已编辑。如果要将查询存储为视图,则会出现此问题