在Google BigQuery中,数组类型用于存储一系列相同数据类型的值。这可以是任何BigQuery支持的数据类型,如整数、字符串、浮点数、甚至是结构体(记录类型)。数组在处理具有多个值的字段时非常有用,例如,当你有多个电话号码或多个地址等属性时。
### 基本概念
- **定义数组**: 在BigQuery中,你可以在表的模式定义中指定某个字段为数组类型。例如,定义一个存储多个电话号码的数组字段:
```sql
CREATE TABLE employees (
name STRING,
phone_numbers ARRAY<STRING>
);
```
- **查询数组数据**: 你可以使用标准的SQL语法来查询数组数据。对数组字段的查询通常涉及到`UNNEST()`函数,这个函数可以将数组展开成表中的多个行,从而可以对数组的每个元素应用查询条件。
```sql
-- 选择所有包含指定电话号码的记录
SELECT name
FROM employees,
UNNEST(phone_numbers) AS phone_number
WHERE phone_number = '123-456-7890';
```
### 常用操作
1. **插入数据**:
```sql
INSERT INTO employees (name, phone_numbers)
VALUES ('John Doe', ['123-456-7890', '987-654-3210']);
```
2. **更新数组**:
使用`ARRAY`构造器或者直接追加元素。
```sql
UPDATE employees
SET phone_numbers = ARRAY_CONCAT(phone_numbers, ['555-555-5555'])
WHERE name = 'John Doe';
```
3. **搜索数组元素**:
使用`UNNEST()`函数和相关的WHERE子句。
```sql
SELECT name
FROM employees, UNNEST(phone_numbers) as phone
WHERE phone = '123-456-7890';
```
4. **数组长度**:
获取数组长度可以使用`ARRAY_LENGTH()`函数。
```sql
SELECT name, ARRAY_LENGTH(phone_numbers) as num_phones
FROM employees;
```
5. **处理数组中的复杂数据**:
如果数组中存储的是结构体或其他复杂类型,你可以通过路径表达式访问结构体的字段。
```sql
CREATE TABLE projects (
project_id STRING,
team_members ARRAY<STRUCT<member_id STRING, role STRING>>
);
SELECT project_id, member.member_id, member.role
FROM projects,
UNNEST(team_members) AS member
WHERE member.role = 'Developer';
```
通过这些基本概念和常用操作,你可以有效地在BigQuery中使用数组类型来管理和查询复杂的数据集。这种类型提供了灵活的数据结构,非常适合处理多值字段和动态数据集。