在BigQuery中将布尔值数组转换为日期、开始时间与结束时间的独立行
实现BigQuery数据转换的方法
核心思路
通过UNNEST函数将daysBitArray数组拆分为单行记录,结合数组索引(OFFSET)映射对应的星期几,过滤掉不营业的日期后,即可得到目标格式。
假设原表结构
假设你的源表名为restaurant_operating_hours,字段如下:
restaurant_name: 餐厅名称(字符串类型)daysBitArray: 营业日期数组(整数数组,索引0对应周一,元素1表示营业,0表示不营业)start_time: 营业开始时间(字符串类型)end_time: 营业结束时间(字符串类型)
转换SQL代码
SELECT restaurant_name, -- 将数组索引映射为对应星期名称 CASE day_offset WHEN 0 THEN 'Monday' WHEN 1 THEN 'Tuesday' WHEN 2 THEN 'Wednesday' WHEN 3 THEN 'Thursday' WHEN 4 THEN 'Friday' WHEN 5 THEN 'Saturday' WHEN 6 THEN 'Sunday' END AS day_of_week, start_time, end_time FROM `your-project.your-dataset.restaurant_operating_hours`, -- 拆分数组并获取每个元素的索引 UNNEST(daysBitArray) WITH OFFSET AS (is_open, day_offset) -- 仅保留营业日期 WHERE is_open = 1 ORDER BY restaurant_name, day_offset
代码说明
- UNNEST WITH OFFSET:把
daysBitArray的每个元素拆成单独一行,同时用day_offset记录元素在数组中的索引(对应星期几)。 - CASE语句:将索引0-6映射为周一到周日的英文名称,匹配目标格式的输出要求;如果需要中文星期,直接替换CASE里的字符串即可。
- WHERE过滤:只保留标记为营业(
is_open=1)的日期行。 - 排序:按餐厅名称和星期顺序排序,让结果更规整。
内容的提问来源于stack exchange,提问作者ANKIT VASHISTHA
相关产品推荐
相关产品推荐

