lateral view

萌哥-爱学习發表於2024-09-12
在 Hive 中,使用 `LATERAL VIEW` 可以實現行轉列的操作,通常與 `explode` 函式結合使用。下面是一個示例,展示如何透過 `LATERAL VIEW` 將行轉為列。

### 示例場景

假設我們有一個名為 `movies` 的表,包含影視作品及其型別,型別是以逗號分隔的字串。

### 1. 建立基礎表

首先,我們建立一個名為 `movies` 的基礎表:

```sql
CREATE TABLE movies (
    title STRING,
    genres STRING
);
```

### 2. 插入資料

接下來,向 `movies` 表中插入一些示例資料:

```sql
INSERT INTO TABLE movies VALUES 
('《疑犯追蹤》', '懸疑, 動作, 科幻, 劇情'),
('《Lie to Me》', '懸疑, 警匪, 動作, 心理, 劇情'),
('《戰狼2》', '戰爭, 動作, 災難');
```

### 3. 使用 `LATERAL VIEW` 進行行轉列

現在,我們可以使用 `LATERAL VIEW` 和 `explode` 函式將 `genres` 列中的型別行轉為列。以下是一個查詢示例:

```sql
SELECT 
    title,
    genre
FROM 
    movies
LATERAL VIEW explode(split(genres, ', ')) exploded_genres AS genre;
```

### 4. 查詢結果

執行上述查詢後,結果將如下所示:

| title         | genre   |
|---------------|---------|
| 《疑犯追蹤》  | 懸疑    |
| 《疑犯追蹤》  | 動作    |
| 《疑犯追蹤》  | 科幻    |
| 《疑犯追蹤》  | 劇情    |
| 《Lie to Me》 | 懸疑    |
| 《Lie to Me》 | 警匪    |
| 《Lie to Me》 | 動作    |
| 《Lie to Me》 | 心理    |
| 《Lie to Me》 | 劇情    |
| 《戰狼2》     | 戰爭    |
| 《戰狼2》     | 動作    |
| 《戰狼2》     | 災難    |

### 總結

- 使用 `LATERAL VIEW` 和 `explode` 函式可以將以逗號分隔的字串轉為多行。
- 透過 `split` 函式將字串分割為陣列,然後使用 `explode` 將陣列中的每個元素轉為單獨的行。

如果你有其他問題或需要更多示例,請告訴我!

相關文章