

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 範例：使用 Pig 建立 HCatalog 資料表並對其進行寫入
<a name="emr-hcatalog-pig"></a>

您可以建立 HCatalog 資料表，並使用 Apache Pig 透過 HCatStorer 使用 Amazon S3 中的資料來源向其寫入資料。HCatalog 需要您停用直接寫入，否則該操作將會失敗且無提示。使用 `mapred.output.direct.NativeS3FileSystem ` 分類，或手動在 Grunt shell 中將 `mapred.output.direct.EmrFileSystem`和 `false` 組態都設為 `mapred-site`。下列範例顯示了使用 HCat CLI 建立的資料表，其後是在 Grunt Shell 中執行的命令，以從 Amazon S3 中的範例資料檔案填入資料表。

若要執行此範例，[請使用 SSH 來連接至主節點](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html)。

使用下列內容建立 HCatalog 指令碼檔案 `wikicount.q`，這會建立名為 `wikicount` 的 HCatalog 資料表。

```
CREATE EXTERNAL TABLE IF NOT EXISTS wikicount( 
col1 string, 
col2 bigint 
) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001' 
STORED AS ORC 
LOCATION 's3://amzn-s3-demo-bucket/hcat/wikicount';
```

使用 HCat CLI 命令以從檔案來執行指令碼。

```
hcat -f wikicount.q
```

接著，使用 `-useHCatalog` 選項來開始 Grunt shell，將組態設為停用直接寫入，從 S3 位置載入資料，然後把結果寫入 wikicount 表格。

```
pig -useHCatalog
SET mapred.output.direct.NativeS3FileSystem false; 
SET mapred.output.direct.EmrFileSystem false; 
A = LOAD 's3://support.elasticmapreduce/training/datasets/wikistats_tiny/' USING PigStorage(' ') AS (Site:chararray, page:chararray, views:int, total_bytes:long); 
B = GROUP A BY Site; 
C = FOREACH B GENERATE group as col1, COUNT(A) as col2; 
STORE C INTO 'wikicount' USING org.apache.hive.hcatalog.pig.HCatStorer();
```