99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

Hive導(dǎo)入導(dǎo)出CSV全攻略:從建表到踩坑實戰(zhàn)

Hive導(dǎo)入導(dǎo)出CSV全攻略:從建表到踩坑實戰(zhàn) 1. 項目背景與核心訴求解析做數(shù)據(jù)開發(fā)的同學(xué)十有八九都跟CSV打過交道。CSV這玩意兒說簡單也簡單就是個逗號分隔的純文本文件說麻煩也麻煩——編碼問題、引號轉(zhuǎn)義、換行符不一致每一樣都能折騰人半天。我自己在實際項目中接過不少這樣的需求業(yè)務(wù)方丟過來一個幾GB的CSV文件讓我塞進(jìn)Hive表里做分析或者反過來讓我把Hive里跑完的結(jié)果導(dǎo)出成CSV發(fā)給下游系統(tǒng)或者交給產(chǎn)品同學(xué)做報表??此苾蓚€方向的操作背后的細(xì)節(jié)其實多得超出大多數(shù)人的預(yù)期。這篇內(nèi)容我圍繞“Hive導(dǎo)入導(dǎo)出CSV全”這個主題把從建表、加載、導(dǎo)出到踩坑排查的完整鏈路都梳理一遍。無論你是剛接觸Hive的新手還是已經(jīng)寫了幾年HQL的老手只要跟CSV打過交道里面總有幾條經(jīng)驗?zāi)軒湍闶∠掳胩炫挪闀r間。我會把每一步為什么要這么做、參數(shù)背后的原理講清楚而不是丟給你一堆命令讓你盲目復(fù)制。先說清楚這篇的核心覆蓋范圍包括Hive內(nèi)部表與外部表的選擇邏輯、CSV文件與Hive表字段的對應(yīng)關(guān)系、LOAD DATA和INSERT OVERWRITE兩條主路徑、各種分隔符和轉(zhuǎn)義符的處理方式、以及導(dǎo)出時常見的文件合并、壓縮格式、編碼轉(zhuǎn)換等實操問題。每一條都是我在真實業(yè)務(wù)環(huán)境中驗證過的方案。2. 環(huán)境準(zhǔn)備與基礎(chǔ)概念2.1 Hive表類型選擇內(nèi)部表還是外部表很多人一上來就建表導(dǎo)數(shù)據(jù)結(jié)果后面刪表的時候把原始CSV也連帶刪掉了哭都來不及。這里核心差別在于內(nèi)部表managed table的數(shù)據(jù)文件完全由Hive管理你DROP表的時候HDFS上的數(shù)據(jù)文件會一并刪除外部表external table則只是讓Hive“掛載”到某個HDFS目錄上DROP表只刪元數(shù)據(jù)原始文件還留在原處。我自己的習(xí)慣是凡是從CSV導(dǎo)入的數(shù)據(jù)一律建外部表。理由是CSV文件往往是業(yè)務(wù)方提供的原始資產(chǎn)可能還需要反復(fù)清洗、回溯一旦被內(nèi)部表連帶刪掉重新找業(yè)務(wù)方要文件的過程極其痛苦。建外部表只是多了一個關(guān)鍵字的事CREATE EXTERNAL TABLE IF NOT EXISTS ods_user_info ( user_id STRING, user_name STRING, age INT, city STRING, created_at STRING ) COMMENT 用戶信息原始表 ROW FORMAT SERDE org.apache.hadoop.hive.serde2.OpenCSVSerde WITH SERDEPROPERTIES ( separatorChar ,, quoteChar \, escapeChar \\ ) STORED AS TEXTFILE LOCATION /data/ods/user_info TBLPROPERTIES (skip.header.line.count 1);2.2 為什么優(yōu)先用OpenCSVSerde而不是默認(rèn)的LazySimpleSerDe這是很多教程沒講透的地方。Hive對TEXTFILE格式的默認(rèn)SerDe是LazySimpleSerDe它對CSV的解析能力其實很弱。默認(rèn)情況下它只認(rèn)分隔符不認(rèn)引號——也就是說如果CSV里某個字段值本身包含了逗號比如北京,朝陽區(qū)默認(rèn)SerDe會把這個字段從逗號處劈開導(dǎo)致列錯位、數(shù)據(jù)錯亂。而OpenCSVSerde是專門為CSV設(shè)計的SerDe它原生支持引號包圍的字段、字段內(nèi)部的逗號、引號轉(zhuǎn)義等標(biāo)準(zhǔn)CSV規(guī)則。換句話說你拿到的CSV只要是符合RFC 4180規(guī)范或者Excel導(dǎo)出的常見格式OpenCSVSerde都能正確解析。實測對比過同一個文件用兩種SerDe加載的結(jié)果默認(rèn)SerDe解析出來的錯誤率在包含逗號字段的場景下能達(dá)到30%以上而OpenCSVSerde基本能做到零錯位。不用糾結(jié)直接選OpenCSVSerde。2.3 表字段類型映射CSV沒有類型Hive有CSV文件本身是沒有類型概念的所有字段本質(zhì)上都是字符串。到了Hive里你要給它聲明Int、Double、Date這些類型這里就埋著導(dǎo)入失敗最常見的雷——某一行某個字段是一個空字符串而它對應(yīng)的Hive字段類型是INTLOAD的時候會直接返回NULL。我的建議是導(dǎo)入階段先用全STRING類型的“裸表”把數(shù)據(jù)原樣加載進(jìn)來做完清洗和校驗之后再通過INSERT SELECT的方式轉(zhuǎn)成正式的分析表該CAST的CAST該過濾的過濾。這樣做的好處是導(dǎo)入流程本身不會因為類型轉(zhuǎn)換報錯而中斷你始終能在原表里看到原始數(shù)據(jù)。比如這樣建一張裸表CREATE EXTERNAL TABLE IF NOT EXISTS tmp_user_info_raw ( user_id STRING, user_name STRING, age STRING, city STRING, created_at STRING ) ROW FORMAT SERDE org.apache.hadoop.hive.serde2.OpenCSVSerde WITH SERDEPROPERTIES ( separatorChar ,, quoteChar \, escapeChar \\ ) STORED AS TEXTFILE LOCATION /data/tmp/user_info_raw TBLPROPERTIES (skip.header.line.count 1);3. 核心細(xì)節(jié)解析與實操要點3.1 分隔符、引號符、轉(zhuǎn)義符的搭配規(guī)則CSV的解析核心在于三個字符的配合分隔符separator、引號符quote、轉(zhuǎn)義符escape。很多導(dǎo)入異常都源于這三個字符配置不一致。先看標(biāo)準(zhǔn)CSV里最經(jīng)典的情況user_id,user_name,age,city,created_at 1001,張三,男,28,北京,朝陽區(qū),2024-06-01 12:00:00這里張三,男被雙引號包住了它內(nèi)部有逗號但整體是一個字段。OpenCSVSerde解析時只要看到quoteChar包裹的內(nèi)容就會把內(nèi)部的逗號當(dāng)普通字符處理。而escapeChar的作用是處理字段內(nèi)部出現(xiàn)的引號本身比如某個字段值是他說你好CSV里會寫成他說\你好\解析器靠escapeChar識別出這里的引號是內(nèi)容而不是語法符號。實操心得如果你導(dǎo)出CSV是給Excel用的分隔符用逗號、引號符用雙引號、轉(zhuǎn)義符用反斜杠就是最穩(wěn)的組合。如果字段里既有逗號又有引號轉(zhuǎn)義符一定要配好否則導(dǎo)出再導(dǎo)入會出現(xiàn)列錯亂甚至數(shù)據(jù)丟失。3.2 跳過表頭行TBLPROPERTIES的妙用業(yè)務(wù)方給的CSV十有八九帶著表頭Hive默認(rèn)不會自動跳過它會把表頭當(dāng)成一條數(shù)據(jù)加載進(jìn)去。你可以在建表的時候通過TBLPROPERTIES聲明跳過第一行TBLPROPERTIES (skip.header.line.count 1);這個屬性從Hive 2.3版本開始支持實測在3.x版本上完全穩(wěn)定。如果你的Hive版本比較老2.1及以下不支持這個屬性那就只能靠清洗腳本去掉表頭再上傳或者加載后再跑一條DELETE——Hive對DELETE的支持很弱所以最好的辦法是加載前用sed -i 1d file.csv這類命令處理一下。3.3 多分隔符場景怎么處理有些“偽CSV”其實不是逗號分隔的可能是豎線|、制表符\t、分號;。這種情況下不需要改代碼只需在建表時改掉separatorCharWITH SERDEPROPERTIES ( separatorChar |, quoteChar \, escapeChar \\ )給一個實際場景的對照參考數(shù)據(jù)來源常見分隔符注意事項標(biāo)準(zhǔn)CSV逗號 ,注意字段內(nèi)逗號需要引號包裹Excel另存為CSV逗號 ,注意中文編碼建議UTF-8日志系統(tǒng)導(dǎo)出豎線 |檢查字段內(nèi)是否包含豎線本身MySQL導(dǎo)出制表符 \t注意\t在HQL里的轉(zhuǎn)義寫法金融報文分號 ;字段內(nèi)分號的處理要提前確認(rèn)注意改分隔符之前先確認(rèn)你的數(shù)據(jù)源在生成文件時是怎么轉(zhuǎn)義的。如果源端沒做任何轉(zhuǎn)義那你加載的時候無論怎么配都是會錯位的。4. 實操過程與核心環(huán)節(jié)實現(xiàn)4.1 導(dǎo)入路徑一LOAD DATA導(dǎo)入本地或HDFS文件這是Hive導(dǎo)入CSV最直接的方式。核心命令是LOAD DATA它分兩種來源LOCAL表示從本地磁盤上傳不帶LOCAL表示文件已經(jīng)在HDFS上。-- 從本地文件系統(tǒng)導(dǎo)入文件會被復(fù)制到Hive表的HDFS目錄 LOAD DATA LOCAL INPATH /home/user/data/user_info.csv INTO TABLE tmp_user_info_raw; -- 從HDFS目錄導(dǎo)入注意HDFS上的文件會被移動到表目錄原路徑不再有文件 LOAD DATA INPATH /input/user_info.csv INTO TABLE tmp_user_info_raw;這里有一個新手必踩的坑從HDFS導(dǎo)入時LOAD DATA不是復(fù)制而是移動mv。如果你的原始文件在HDFS的/input目錄下LOAD完之后原文件就沒了。如果不想動原始文件有兩個替代方案先把文件cp到另一個目錄再LOAD那個目錄不走LOAD直接把文件放到外部表指定的LOCATION目錄下因為外部表的LOCATION就等同于表的存儲目錄放進(jìn)去之后立刻就能查詢到第二種方法我用得更多因為省掉了一次HDFS操作而且不依賴HiveServer2的執(zhí)行任務(wù)。4.2 導(dǎo)入路徑二INSERT OVERWRITE寫SELECT查詢結(jié)果有時候“導(dǎo)入”不是從文件直接加載而是需要從另一張表加工后寫入。這種情況用INSERT OVERWRITE或者INSERT INTOINSERT OVERWRITE TABLE dws_user_info SELECT user_id, user_name, CAST(age AS INT) AS age, city, created_at FROM tmp_user_info_raw WHERE user_id IS NOT NULL AND user_id ! ;INSERT OVERWRITE是全量覆蓋——每次執(zhí)行都會清空目標(biāo)表目錄下的所有文件然后寫入新數(shù)據(jù)。如果只想追加用INSERT INTO。但注意Hive的表文件可能會因此變得很碎如果頻繁INSERT INTO建議定期做ALTER TABLE ... CONCATENATE只適用于ORC格式或者重建表做一次合并。4.3 導(dǎo)出路徑一INSERT OVERWRITE DIRECTORY導(dǎo)出結(jié)果到HDFS把Hive查詢結(jié)果寫出去最基礎(chǔ)的方式是INSERT OVERWRITE DIRECTORY /tmp/user_export ROW FORMAT DELIMITED FIELDS TERMINATED BY , SELECT * FROM dws_user_info;這樣導(dǎo)出的文件是純逗號分隔的文本文件沒有表頭。很多下游同學(xué)拿到后發(fā)現(xiàn)列名對不上所以實際項目中我通常會自己拼一行表頭讓整個輸出變成帶表頭的完整CSVINSERT OVERWRITE DIRECTORY /tmp/user_export ROW FORMAT DELIMITED FIELDS TERMINATED BY , SELECT user_id,user_name,age,city,created_at UNION ALL SELECT user_id, user_name, CAST(age AS STRING), city, created_at FROM dws_user_info;UNION ALL的方式在Hive里需要注意類型一致性所有SELECT分支的列類型要對得上。第一條分支里所有字段都是STRING第二條分支把數(shù)字類型CAST成STRING這樣整個結(jié)果集的數(shù)據(jù)類型是統(tǒng)一的。4.4 導(dǎo)出路徑二用Hive CLI輸出重定向到本地文件如果你查詢的結(jié)果量不大幾千條到幾萬條可以直接用Hive CLI或Beeline執(zhí)行SQL把標(biāo)準(zhǔn)輸出重定向到本地文件beeline -u jdbc:hive2://your-host:10000/default \ --silenttrue \ --outputformatcsv2 \ -e SELECT user_id, user_name, age, city FROM dws_user_info WHERE dt2024-06-01 \ /home/user/export/user_info_20240601.csv--outputformatcsv2是Beeline自帶的一種CSV輸出格式它會把查詢結(jié)果顯示成帶引號的CSV對字段內(nèi)含逗號、換行符的場景處理得比csv格式更好。如果追求極致的標(biāo)準(zhǔn)化可以用tsv2輸出制表符分隔的結(jié)果。注意--silenttrue不加上這個參數(shù)的話Beeline會把一大堆Hive的運行日志、箭頭符號混進(jìn)輸出文件里文件直接變臟。我自己第一次導(dǎo)出就踩了這個坑輸出文件前幾行全是INFO級別的日志還得用腳本清理非常麻煩。4.5 導(dǎo)出路徑三通過HDFS下載合并文件這個方法是生產(chǎn)環(huán)境最常用的。Hive跑完INSERT OVERWRITE DIRECTORY之后HDFS上往往會生成多個part文件數(shù)量取決于運行時的Reducer數(shù)量。如果需要給業(yè)務(wù)方一個單文件CSV需要把這些part文件合并。步驟是這樣的# 查看生成的文件 hdfs dfs -ls /tmp/user_export # 合并所有part文件到本地 hdfs dfs -getmerge /tmp/user_export /home/user/export/user_info_all.csv-getmerge是HDFS命令里非常好用的一個工具它會把目錄下的所有文件按順序拼接成一個本地文件。默認(rèn)情況下它不做任何格式處理直接把內(nèi)容首尾相接。如果每個part文件末尾都有換行符合并后的文件行不會串。但如果你不確定可以在-getmerge后面加一個-nl參數(shù)讓它在每個文件之間自動追加換行hdfs dfs -getmerge -nl /tmp/user_export /home/user/export/user_info_all.csv這里有個經(jīng)驗點在寫導(dǎo)出SQL之前就可以提前控制Reducer數(shù)量。如果數(shù)據(jù)量不大通過SET mapred.reduce.tasks 1;強制只有一個Reducer生成的就是一個part文件連合并這一步都省了。但這個方法只適合幾GB以內(nèi)的數(shù)據(jù)量數(shù)據(jù)量大了單Reducer會成為性能瓶頸。5. 復(fù)雜場景與性能調(diào)優(yōu)5.1 大文件導(dǎo)入如何避免OOM和解析失敗曾經(jīng)接手過一個業(yè)務(wù)需求一份CSV文件接近20GB單行的字段長度最長超過2MB用戶畫像標(biāo)簽串在一起導(dǎo)致。直接用LOAD DATA導(dǎo)入Hive任務(wù)跑十來分鐘后就開始報Java heap space或者OutOfMemory。排查下來問題出在兩點第一OpenCSVSerde在處理超長字段時會把整行數(shù)據(jù)讀入內(nèi)存進(jìn)行解析如果單行數(shù)據(jù)太大Mapper所在的Container很容易OOM。解決思路是先看業(yè)務(wù)上能不能拆開這些超長字段如果不能就得在Container參數(shù)上加內(nèi)存SET mapreduce.map.memory.mb 4096; SET mapreduce.map.java.opts -Xmx3072m;第二CSV文件如果有壞行比如某一行少了一個逗號導(dǎo)致列數(shù)不匹配OpenCSVSerde默認(rèn)是把缺失的列置為NULL不會報錯但如果某一行列數(shù)多出幾個則有可能觸發(fā)解析異常。我建議在導(dǎo)入前先用一個快速巡檢任務(wù)跑一遍文件統(tǒng)計行數(shù)和最大列數(shù)# 統(tǒng)計文件總行數(shù) wc -l user_info.csv # 統(tǒng)計最大列數(shù)用awk按逗號拆分 awk -F, {print NF} user_info.csv | sort -nr | head -1如果某個文件的列數(shù)比表字段多這批數(shù)據(jù)肯定有問題先別急著導(dǎo)入。5.2 分區(qū)表怎么導(dǎo)入和導(dǎo)出CSV實際業(yè)務(wù)中我們很少把CSV直接導(dǎo)入非分區(qū)表因為后續(xù)查詢、清理、生命周期管理都離不開分區(qū)。帶分區(qū)的建表語句CREATE EXTERNAL TABLE IF NOT EXISTS dws_user_info ( user_id STRING, user_name STRING, age INT, city STRING ) PARTITIONED BY (dt STRING) ROW FORMAT SERDE org.apache.hadoop.hive.serde2.OpenCSVSerde WITH SERDEPROPERTIES ( separatorChar ,, quoteChar \, escapeChar \\ ) STORED AS TEXTFILE LOCATION /data/dws/user_info TBLPROPERTIES (skip.header.line.count 1);靜態(tài)分區(qū)導(dǎo)入LOAD DATA LOCAL INPATH /home/user/data/user_info_20240601.csv INTO TABLE dws_user_info PARTITION (dt2024-06-01);動態(tài)分區(qū)導(dǎo)入從不帶分區(qū)的臨時表刷到分區(qū)表SET hive.exec.dynamic.partition.mode nonstrict; INSERT OVERWRITE TABLE dws_user_info PARTITION (dt) SELECT user_id, user_name, age, city, dt FROM tmp_user_info_raw;導(dǎo)出場景反過來查某個分區(qū)的數(shù)據(jù)寫成CSVINSERT OVERWRITE DIRECTORY /tmp/user_export_20240601 ROW FORMAT DELIMITED FIELDS TERMINATED BY , SELECT user_id, user_name, age, city FROM dws_user_info WHERE dt 2024-06-01;5.3 壓縮格式的選擇導(dǎo)出gzip還是純文本導(dǎo)出CSV時要不要順便壓縮取決于下游怎么用。如果是給數(shù)據(jù)倉庫或者分析平臺做后續(xù)處理gzip壓縮是很好的選擇——體積能縮小到原來的五分之一左右而且大多數(shù)系統(tǒng)支持直接讀取gzip格式的CSV。實現(xiàn)方式非常簡單在導(dǎo)出SQL里加一句存儲壓縮配置SET mapreduce.output.fileoutputformat.compress true; SET mapreduce.output.fileoutputformat.compress.codec org.apache.hadoop.io.compress.GzipCodec; INSERT OVERWRITE DIRECTORY /tmp/user_export ROW FORMAT DELIMITED FIELDS TERMINATED BY , SELECT * FROM dws_user_info WHERE dt2024-06-01;如果你要拿這個CSV給非技術(shù)的業(yè)務(wù)人員就別壓縮了。他們拿到一個.gz文件大概率不知道怎么打開反而增加溝通成本。給程序做自動化消費的才考慮壓縮。5.4 編碼問題的統(tǒng)一處理CSV最讓人頭痛的編碼坑在我做過的項目里出現(xiàn)頻率非常高。業(yè)務(wù)方從Excel導(dǎo)出的CSV默認(rèn)是GBK或者GB2312編碼上傳到HDFS后Hive按UTF-8解析結(jié)果中文全部變成亂碼。處理方案有兩種第一種在導(dǎo)入前統(tǒng)一轉(zhuǎn)換編碼# 本地轉(zhuǎn)碼后再上傳 iconv -f GBK -t UTF-8 user_info_original.csv user_info_utf8.csv # 轉(zhuǎn)碼后的文件上傳HDFS hdfs dfs -put user_info_utf8.csv /input/第二種在導(dǎo)出時指定編碼給下游。Hive自身沒有編碼轉(zhuǎn)換函數(shù)但可以通過SELECT搭配普通字符串操作變通處理常見的做法是導(dǎo)出后在本地統(tǒng)一轉(zhuǎn)換。我的建議是源頭統(tǒng)一UTF-8。和業(yè)務(wù)方約定所有CSV文件必須提供UTF-8編碼版本。這個約定看起來簡單但在實操中能省掉一大半的亂碼麻煩。如果你控制不了源端那就在導(dǎo)入前例行執(zhí)行iconv轉(zhuǎn)碼步驟把它寫進(jìn)定時調(diào)度里。6. 常見問題與排查技巧實錄6.1 表頭沒有被跳過第一條數(shù)據(jù)丟失現(xiàn)象建表時明明設(shè)置了skip.header.line.count1LOAD之后查詢發(fā)現(xiàn)第一行數(shù)據(jù)不見了。排查思路這個屬性是Hive讀取時候的控制參數(shù)它生效的前提是文件在表目錄下能被識別成數(shù)據(jù)文件。如果你用LOAD DATA加載的是整個CSV文件會發(fā)現(xiàn)表頭行被正確跳過但如果你先hdfs dfs -put把文件放進(jìn)了外部表的LOCATION目錄然后建表時又加了skip.header.line.count1那么建表之前文件就已經(jīng)在那里了之后LOAD新文件時表頭跳過邏輯可能只作用于新增的文件而不是歷史文件。實操中我傾向于不用這個屬性而是在上傳之前用腳本統(tǒng)一去掉表頭。理由很簡單這個屬性在不同Hive版本上存在兼容差異而預(yù)處理去表頭是確定性最高的方案。6.2 字段內(nèi)含換行符導(dǎo)致行數(shù)變多CSV規(guī)范允許字段內(nèi)包含換行符比如一個備注字段里就有一個真正的換行這就導(dǎo)致Hive在按行讀取文件時誤以為出現(xiàn)了新紀(jì)錄。這種場景下OpenCSVSerde同樣能處理——RFC 4180規(guī)范要求含換行的字段必須用引號包住OpenCSVSerde解析時能識別出這是個字段內(nèi)的換行而不是行終結(jié)符。但要注意如果源端生成CSV時沒有用引號包住含換行的字段那任何解析器都沒法正確判斷數(shù)據(jù)必然被拆成兩行。而且Hive讀取文件是按行\(zhòng)n切分后再交給SerDe解析的這意味著如果字段內(nèi)有換行但沒有引號包裹必錯如果字段內(nèi)有換行且用引號包裹OpenCSVSerde可以正確還原換行實測過一個文件里包含大量多行地址字段的數(shù)據(jù)用OpenCSVSerde加載后文本字段內(nèi)的換行被還原成\n存儲字段整體是完整的查詢結(jié)果也能對上行數(shù)。前提條件就是源端CSV生成必須規(guī)范。6.3 導(dǎo)入后部分行顯示為NULL這個最常見的原因是CSV文件里本來就有空值。比如1001,張三,28,,2024-06-01city字段是空的導(dǎo)入后顯示NULL是正常的。但有一種情況很坑CSV里出現(xiàn)\N字符。在Hive中\(zhòng)N是文本文件中表達(dá)NULL的默認(rèn)標(biāo)記。如果你的CSV數(shù)據(jù)里恰好有字符串\N比如某個字段值是\N表示空導(dǎo)入后它會被自動識別成NULL而不是字符串\N。這是Hive的默認(rèn)行為處理方法是建表時通過SERDEPROPERTIES修改WITH SERDEPROPERTIES ( serialization.null.format )設(shè)置成空字符串后只有空字段才是NULL\N會被當(dāng)作普通字符串處理。6.4 導(dǎo)出文件亂碼問題導(dǎo)入時亂碼的原因在前面說過了。導(dǎo)出時亂碼的問題則往往出在文件后續(xù)流轉(zhuǎn)環(huán)節(jié)用INSERT OVERWRITE DIRECTORY導(dǎo)出的文件是UTF-8編碼的但用Excel打開的時候Excel會默認(rèn)猜測編碼如果猜成GBK就會顯示亂碼。有一個不太優(yōu)雅但很實用的做法導(dǎo)出后帶一個BOM頭Byte Order Mark。實測帶BOM的UTF-8文件用Excel打開時編碼識別準(zhǔn)確率幾乎100%。Hive本身不支持寫B(tài)OM所以通常在本地用命令處理# 給導(dǎo)出文件加上UTF-8 BOM printf \xEF\xBB\xBF temp_with_bom.csv cat user_info_all.csv temp_with_bom.csv mv temp_with_bom.csv user_info_all.csv不過這也會帶來新問題如果這個文件還要再導(dǎo)回HiveBOM頭會變成第一個字段值的一部分需要在導(dǎo)入時用TRIM或者正則處理掉。所以我只在面向業(yè)務(wù)人員的導(dǎo)出場景加上BOM面向系統(tǒng)對接的導(dǎo)出保持純UTF-8。6.5 常見問題排查速查表現(xiàn)象可能原因解決思路導(dǎo)入后中文亂碼源文件GBK編碼Hive按UTF-8解析上傳前用iconv轉(zhuǎn)UTF-8第一條正常數(shù)據(jù)丟失表頭未被過濾或過濾策略不對預(yù)處理去掉表頭重新LOAD列數(shù)錯位、字段串列字段內(nèi)含逗號但無引號包裹源端修復(fù)CSV或替換分隔符字段內(nèi)容被截斷字段內(nèi)含換行符且被解析成新行確認(rèn)引號包裹或用OpenCSVSerdeLOAD后原文件消失從HDFS導(dǎo)入時文件被移動用外部表LOCATION方式或先復(fù)制導(dǎo)入后大量NULL類型轉(zhuǎn)換失敗或CSV空值先用全STRING裸表加載導(dǎo)出文件帶日志信息未加--silenttrue重跑并添加靜默參數(shù)導(dǎo)出文件有多個partReducer數(shù)量大于1用getmerge合并或設(shè)置reduce1帶表頭導(dǎo)出時UNION ALL類型不匹配第一個分支與后續(xù)分支字段類型不一致全部字段CAST成STRING7. 踩過的坑與實用經(jīng)驗總結(jié)我在做Hive數(shù)據(jù)導(dǎo)入導(dǎo)出項目時踩過不少坑有些坑的排查時間長達(dá)一整天。這里分享幾個最典型的經(jīng)驗。第一個經(jīng)驗從業(yè)務(wù)方接收CSV時先做數(shù)據(jù)質(zhì)檢再導(dǎo)入。一份20GB的CSV文件如果導(dǎo)入后又發(fā)現(xiàn)某個字段串列或者編碼有問題重新導(dǎo)入的時間成本非常高。我的習(xí)慣是先拿一個幾千行的采樣文件導(dǎo)入到臨時表跑幾個簡單的查詢行數(shù)、空值率、列數(shù)分布確認(rèn)沒有問題后再全量導(dǎo)入。這個步驟只花幾分鐘但能避免幾小時的返工。第二個經(jīng)驗用外部表做中轉(zhuǎn)用內(nèi)部表做存儲。所有CSV原始數(shù)據(jù)都建外部表LOCATION指向固定的HDFS目錄。這樣做的好處是后續(xù)清洗出錯時原始數(shù)據(jù)還在DROP表也不會影響HDFS上的文件。清洗后的數(shù)據(jù)再用內(nèi)部表保存享受Hive的管理和生命周期功能。第三個經(jīng)驗導(dǎo)出CSV給業(yè)務(wù)方之前一定要跟對方確認(rèn)打開方式。如果對方說“我用Excel打開”那么編碼用UTF-8帶BOM分隔符用逗號字段內(nèi)有逗號的情況必須加雙引號如果對方說“我用Python pandas讀”那么編碼用UTF-8不帶BOM加不加表頭取決于對方需求但字段內(nèi)最好不要有多余的轉(zhuǎn)義符否則pandas的read_csv參數(shù)配置會很繁瑣。上個項目里就遇到過這樣的事我導(dǎo)出的CSV字段里為了兼容Excel加了雙引號轉(zhuǎn)義結(jié)果下游Python腳本用默認(rèn)參數(shù)讀取時引號也被讀進(jìn)來了字段值變成了張三帶引號對方又花了大半天寫清洗邏輯。從那以后每次導(dǎo)出我都會問清楚下游消費方式再決定轉(zhuǎn)義策略。第四個經(jīng)驗CSV導(dǎo)入導(dǎo)出的調(diào)度任務(wù)一定要有監(jiān)控和告警。數(shù)據(jù)量大的時候LOAD DATA任務(wù)可能跑10分鐘以上如果中途失敗Hive不會自動清理半成品數(shù)據(jù)部分文件可能已經(jīng)被寫入。重跑之前先確保表目錄是干凈的或者用INSERT OVERWRITE而不是INSERT INTO否則可能舊新數(shù)據(jù)混在一起。8. 一個端到端的完整實戰(zhàn)案例為了把這些分散的點串起來我給出一個從我實際項目中抽象出來的完整流程。需求描述某公司的運營團(tuán)隊每天會從業(yè)務(wù)系統(tǒng)導(dǎo)出當(dāng)天的用戶行為CSV文件包含用戶ID、行為類型、行為時間、行為詳情等字段。文件格式為標(biāo)準(zhǔn)CSVUTF-8編碼第一行是表頭。需要每天自動導(dǎo)入Hive供數(shù)據(jù)分析團(tuán)隊使用。8.1 第一步創(chuàng)建外部臨時表CREATE EXTERNAL TABLE IF NOT EXISTS tmp_user_behavior_raw ( user_id STRING, behavior STRING, event_time STRING, detail STRING ) ROW FORMAT SERDE org.apache.hadoop.hive.serde2.OpenCSVSerde WITH SERDEPROPERTIES ( separatorChar ,, quoteChar \, escapeChar \\ ) STORED AS TEXTFILE LOCATION /data/tmp/user_behavior_raw TBLPROPERTIES (skip.header.line.count 1);8.2 第二步上傳CSV文件# 刪除歷史遺留文件避免新舊混存 hdfs dfs -rm -f /data/tmp/user_behavior_raw/*.csv # 上傳當(dāng)天的CSV文件 hdfs dfs -put /home/user/data/user_behavior_20240601.csv /data/tmp/user_behavior_raw/因為建了外部表文件放到LOCATION目錄后Hive立刻就能查看到數(shù)據(jù)不用再執(zhí)行LOAD DATA。文件不會被移動原始文件保留一份后續(xù)如果要回溯仍然找得到。8.3 第三步數(shù)據(jù)質(zhì)檢-- 查看總行數(shù) SELECT COUNT(*) FROM tmp_user_behavior_raw; -- 查看每條記錄各字段為NULL的情況 SELECT SUM(CASE WHEN user_id IS NULL OR user_id THEN 1 ELSE 0 END) AS user_id_null_cnt, SUM(CASE WHEN behavior IS NULL THEN 1 ELSE 0 END) AS behavior_null_cnt, SUM(CASE WHEN event_time IS NULL THEN 1 ELSE 0 END) AS event_time_null_cnt FROM tmp_user_behavior_raw; -- 抽查幾條樣本 SELECT * FROM tmp_user_behavior_raw LIMIT 10;如果行數(shù)、空值率、樣本內(nèi)容都符合預(yù)期繼續(xù)下一步不滿意就直接刪目錄重新上傳。8.4 第四步清洗并寫入正式表CREATE TABLE IF NOT EXISTS dws_user_behavior ( user_id STRING, behavior STRING, event_time TIMESTAMP, detail STRING ) PARTITIONED BY (dt STRING) STORED AS ORC; SET hive.exec.dynamic.partition.mode nonstrict; INSERT OVERWRITE TABLE dws_user_behavior PARTITION (dt) SELECT user_id, behavior, CAST(event_time AS TIMESTAMP) AS event_time, detail, 2024-06-01 AS dt FROM tmp_user_behavior_raw WHERE user_id IS NOT NULL AND user_id ! ;正式表用ORC存儲查詢性能比TEXTFILE高很多而且還支持后續(xù)的向量化查詢、列裁剪等優(yōu)化。這一步重點是把STRING類型的event_time轉(zhuǎn)成TIMESTAMP過濾掉空user_id的臟數(shù)據(jù)。8.5 第五步導(dǎo)出當(dāng)日分析結(jié)果INSERT OVERWRITE DIRECTORY /tmp/behavior_export/20240601 ROW FORMAT DELIMITED FIELDS TERMINATED BY , SELECT user_id, behavior, event_time, detail FROM dws_user_behavior WHERE dt 2024-06-01;然后合并下載hdfs dfs -getmerge -nl /tmp/behavior_export/20240601 /home/user/export/behavior_20240601.csv這樣給到需求方的是一個干凈、單文件、UTF-8無BOM的CSV直接可以分發(fā)給業(yè)務(wù)團(tuán)隊使用。9. 寫在最后的補充我實際做這些導(dǎo)入導(dǎo)出工作時越來越覺得CSV這種格式雖然簡單但正因為簡單反而容易在細(xì)節(jié)上翻車。SerDe選型、編碼統(tǒng)一、表頭處理、文件合并每個環(huán)節(jié)單獨拿出來都不難合在一起卻需要一套完整的流程去保證穩(wěn)定可靠。建議你在自己的項目里先建立一套標(biāo)準(zhǔn)化的CSV導(dǎo)入導(dǎo)出流程模板包括建表語句模板、質(zhì)檢SQL模板、導(dǎo)出腳本模板。這樣新需求來了只需要替換表名和字段名就能快速復(fù)用整套流程不用每次從零開始摸索。這套流程沉淀得越完善你在處理數(shù)據(jù)對接上的時間成本就越低。如果后續(xù)有需要還可以在這個基礎(chǔ)上擴展成通用的數(shù)據(jù)交換模塊支持其他分隔符格式、壓縮格式、甚至自動識別表頭字段名的功能。先把基礎(chǔ)的CSV鏈路打磨扎實后面所有擴展都會順很多。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久久97| 密黄站| 超碰人人91| 伊人激情综合| 婷婷丁香在线| 精品激情| 丁香五月婷婷在线| 超碰renrenai| 天天操天天爱天天日| 丁香久久在线| 激情丁香五月| 小视频久久久aaa| 5月丁香六月情| 综合久久五月天| 成人无码髙潮喷水A片| 丁香五月婷婷五月天| 天天成人综合| 亚洲色婷婷色| 成人精品在线观看| 国产五月天婷婷| 亚洲成人在线观看av| 色五月婷婷av| 99ri精品在线| 丁香五月社区| 少妇激情五月天| 天天草婷婷五月| 九九色色色| 六月五月天婷婷涩播在线| 亚洲六月婷婷| 丁香六月啪啪啪| 久久婷婷五月天综合| 男人天堂伊人五月丁香| 狠狠五月激情在线| 五月天色色激情综合| 热99在线精品| 97操碰在线视频| 九色综合网| www.五月天婷婷| 97精品自拍视频| 五月开心啪啪| 99热在线观看这里只有精品| 五月天精品综合在线| 婷婷香香五月| 激情综合五月激情17| 成人短视频在线免费观看| 校花娇喘呻吟校长陈若雪视频| 五月天婷婷小说| 色久免费| 中文在线视频久1| 天天干天天干天天干天天干天天干天天干天天| 日韩无码人妻一区二区三区综合| 深爱激情五月天色婷婷| 伊人狠狠干| 五月激情另类| 婷婷丁香五月综合激情小说| 婷婷色情六月| 99色色网| 超碰在线人妻| 久久婷婷五月天| 天天干 夜夜爽| 五月婷婷啪啪| 欧美电影在线播放| 99久久婷婷精品视频| 日日干四虎| 蜜桃成语时李时珍 免费| 99久久久久| 色综合色色色| 99热热热99精品婷婷| 欧美99| 狠狠色婷婷| 色五月五月婷婷| 俺去也在线官网| 婷婷夜夜夜夜| 激情婷婷五月| 色色色色色色色色综合网| www色色com| 9色在线| 色色性爱视频| 激情五月天婷婷播播久久综合91| 欧洲区自拍| 欧美男女婷婷| 久九色| 九九色热| 热99只有精品| 大香蕉五月婷婷| 91viP在线看| 五月天婷婷激情小说电影| 天天射综合网站| 精品久久艹| 四色99久久| 99热啪啪| 大香蕉综合视频在线| 性爱网五月婷婷| 色婷婷丁香AV综合| 成人五月天综合网| www.henhengan| 丁香 久久| 色屌丝中文字幕| 成人无码髙潮喷水A片| 97超碰婷婷五月天| 99热99干| 国产26uuu| 中文字幕综合网| 五月婷婷激情| 色婷婷情片| www.henhenl| 91综合在线| 色综合性视频| 色一情一乱一乱一区91| 五月激香蕉网| caop在线视频| 丁香成人视频| 少妇性BBB搡BBB爽爽爽电影| 99热这里只有精品9| 婷婷另类小说| 精品国产乱码久久久久久免费| 五月丁香激情综合网官网| 庭庭久久内射| 色五婷婷| 日韩中文字幕| 婷婷五月天成人网| 色综合五月天| 伊久大香蕉| ′久久99一| 翔田千里aV中文字幕| 停停六月 综合| 久久久久妻| 激情五月天免费视频| 九九热自拍| 国产乱妇乱子在线播视频播放网站| 亚洲国产黄色电影| 开心五月丁香综合久久| 婷婷少妇激情| 性爱网六月丁香| 好吊操这里只有精品| 色色色热热热| 亚洲不卡123| 色五月婷婷天天干| 99re热| 26uuu精品国产| 99精品视频在线观看| 超碰人人在线观看| 色 五月婷婷基地| 337p大胆噜噜噜噜噜91Av| 91操黄| 激情 五月 婷婷 丁香| 五月激情小说网| 中文字幕无码人妻少妇免费视频| 色婷婷五月天天天天天| 丁香五月播播| 五月婷婷啪啪网| 人人人人人人人草| 熟妇高潮一区av| 丁香激情五月综合网| 婷婷色在线视频| 欧美日韩成人综合9| 激情视频婷婷五月花| 婷婷九月丁香| 九色在线观看91av| 五月丁香六月婷婷激情视频在线观看免费| 9热成人在线视频| 久久杏爱视频| 国产在线aaa片一区二区99| 久久新地址| 五月婷婷六月天| 色99xx| 超碰五月婷婷五月天| 99热国内| 日本人妻A片成人免费看片| 91久久国产自产拍夜夜91久久精品文字>91麻豆精品国产 | 综合视频久久| 99玖玖免费视频| 金品在线视频99| 激情久久综合网| 裸体做A爰片毛片A片免费| 91狠狠综合久久久久久| 五月天成人综合| 99 re视频一区| 亭亭五月丁香五月天激情| 丁香五月婷中字在线| 五月天自拍视频| 99精品无码| 亭亭丁香aV| 日日杆天天| 97干97色| 婷婷久久五月丁香| 99热最新精品| 日韩艹比| 五月婷婷五月天在线| 色婷婷玖玖影院| 中文av网站| 日韩无码系列| av九九| 丁香五月婷婷超碰在线| 噜噜噜狠狠色综合| 五月丁香AV在线| 激情五月黄色| 五月激情小说| 伊人春天av| 99九九精品| 亚洲激情电影五月天色婷婷丁香一起草| 97福利视频| 丁香五月在线观看| 久热综合| 六月五月丁香五月欧美| 国产精品天天狠天天看| 人人摸人人搞| 97视频久久| 亚洲AV免费在线| 五月婷婷高清| 97男人天堂| 天天爱天天爽| 综合婷婷六月| 肏日网在线看| 丁香五月五月婷婷| 五月婷婷丁香瑟瑟视频| 97福利视频| 开心激情站| 丁香五月天啪啪激情综和网| 九色 在线| 精品人妻一区二区| 五月丁香六月激情欧美综合| 激情婷婷丁香五月天小说| 色爱综合网| 激情婷婷网| 玖玖婷婷五月| 丁香五月综合狠狠| 五月婷婷综合网| 色综合开心五月深爱五月| 色婷婷成人久久| 五月综合丁香婷婷| anquye五月| 91久久综合亚洲噜噜成人在线| 天干夜夜操| 99热骚货| 97色97干| 99色在线观看视频者| 先锋资源婷婷| 天天色天天爱天天爽| 综合狠狠干| 亚洲精品一区中文字幕乱码| 超碰在线9| 婷婷性爱无码视频| 久久久人妻人伦| 色婷婷yy久| 天天干狠狠| 久久机热思思热| 97精品欧美91久久久久久久| 五月丁香六月婷婷的女人| 99在线精品免费视频| www一区二区三区| 色玖玖综合网| YW无码| 女人天堂AV| 丁香五月天网友自拍啪啪啪视频| 夜夜骑日日操| 五月色网| 色七七九九| 久爱综合| 国产69久久久欧美黑人A片| 在线视频99| 五月天婷婷色小说| 激情婷婷综合| 99热超碰| 怡红院 久久| 碰人人97| 五月婷婷 自拍| 亚洲V国产V欧美V久久久久久| 色吧五月婷婷| 99色 | 久久免费干| 九九成人| 五月天社区| 日韩超碰在线| 色色五月婷婷久久| z色五月播播久久| 91小黄书网址在线观看| 69五月天视频| 啪啪啪啪五月天| 五月婷婷激情刺激| 激情五月激情综合俺也去婷婷小说| 久久99精品日本| 韩日AV片| 欧美啪啪五月天| 亚洲成人av中文| 中文字幕乱码亚洲精品一区| 情欲禁地| 婷婷六月激情综合| 99久久综合狠狠综合久久| 激情五月天网站| www.久久久久| 亚洲综合久| 婷婷五月色激情欧美激情| 亚洲天码视频www蛋播视频| 五月天堂婷婷| 中出内射的人妻视频| 岛国在线观看91| 婷婷五月激情综合| 色婷婷成人做爰A片免费看网站| 狠狠操狠狠操| 免费看欧美成人A片无码| 91成人性爱视频| 99热这里只有精品22| 色综合综合色| 国产激情综合五月久久| 色5月婷婷| 国产欧洲欧洲精品久久| 色激情五月天| 九九爱激情| 色色色激情网| 超碰97色| 欧美日朝成人| 五丁香激情综合| 99热这里只有精品13| 色综合五月婷婷狠狠干| 丁香五月激情综合啪啪| 丁香五月天电影| 色色色综合| 99在线免费视频| 超碰成人在线观看| 99热这里都是精品| 99色在线观看视频者| 狠狠爱婷婷五月天| 狼友视频在线观看18| 久久精品99| 中文幕无线码中文字蜜桃| 五月婷婷五月天| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 骚五月婷婷| 日韩人妻在线观看| 五月婷免费视频久久久| 久久亚洲激情五码| 丁婷婷五月天在线播放| 五月激情综合网| 婷婷亚洲综合| 开心婷婷五月综合| 婷婷射综合| 五月天婷婷六月激情网| 婷婷五月天首页| 另类激情综合| 婷婷色婷婷| 日本美女97在线视频| 婷婷丁香先锋资源网站| 久久视这里只有精品| 丁香婷停五月激情综合深爱| 激情五月综合网| 婷婷激情小说| 天色色综合网| 开心六月丁香五月婷婷| 无码任你操| 色五月综合| 中文字幕日本最新乱码视频| 婷婷激情在线| 五月婷婷丁香av| 69精品人人人人| 亚洲五月婷天天操| 久久女人天堂| 色天使久久综合| 亚洲av网站| 色色色色av777| 玖玖五月丁香| 激情婷婷丁香| 超碰99在线观看| 热99只有精品| 99精品在线| 91日精品| 五月丁香六月停停| 婷婷欧美| 黑人熟妇一区二区三区| www五月天激情com| 精品一区二区三区四区五区六区| 色色色五月婷| 五月开心深爱激情网| 小视频久久久aaa| 99碰碰碰| 天天成人综合视频| 日日夜夜狠狠| 九九九这里只有精品| www.色色色色| 99原创自拍视频在线观看| 91婷色| www夜夜操wwwcon| 色五月激情婷婷| 丁香五月婷婷高清| 99婷婷五月天| 51XX午夜影福利| 五月天小说激情| 五月丁香色色综合| 91精品久久久久久综合五月天| 激情婷婷护士激情| 五月开心婷婷| 天天做天天爽| site:esunnet.com| 日本天天色| 任你擦免费视频| www.ppypp| h在线看免费版在线看| 人操人人| 狠狠草狠狠草| 国产性爱色| 天天射影视综合网| 色五月情| se99在线| 九九日伊人| 五月天婷五月天综合网小说首页-五月天激激婷婷大综合,婷婷亚洲综合五月天小说 | 99无码视频| 欧美日本黄色| 天天色丁香| 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 亚洲妇女熟BBW| 色~性~乱~伦~噜| 激情五月婷婷在线观看| 综合亚洲AV| 久热精品视频| 五月婷婷亚洲综合在线 | 99精品国产在热久久| 99自拍视频| 超碰操网| 99热综合| 无码人妻少妇色欲AV一区二区| 丁香五月情色| 青青青在线视频国产| 欧美欧盟性爱网| 天天操天天操天天操天天操天天操| 婷婷五月天Av| www.99热视频| 五月色无码| 婷婷爱五月天| 激情五月天之六月婷婷| 婷婷丁香五月综合网| 婷婷五月天日日日干干干| 久久精品99国产精品日本| 99色啊| 色噜噜狠狠色综无码久久合欧美| 伊人干练久| 成人做爰高潮A片免费视频| 九九综合精品| www.色色色com| 3p久久| √天堂资源在线人妻熟女| 色99自拍| 91欧美| 青青草深爱激情网| 九月婷婷综合在线| www色婷婷| 夜夜夜天天操| 婷婷99狠狠躁天天久久久九九九| 婷婷五月婷婷五月| 精品久久婷婷| 激情综合网五月丁香| 超碰免费人人| 丰满少妇乱A片无码| 五月婷在线色视频| 免费操超碰| 69久久99精品久久久久婷婷| 婷婷五月天av网| 亚洲乱码日产精品BD| 五月天综合图片| 综合玖玖偷拍| 久久色情| 激情五月综合网最新 | 色色色999| 就去涩涩丁香五月天| 色色婷婷综合| 亚洲天堂大香蕉| 丁香五月婷婷久久综合激情网| 婷婷色色网| 人人摸人人干人人做| 99热加勒比| 丁香五月天激情| 九九99九九精品视频| 五月丁香激情婷婷| 色色日韩无码| 婷婷激情六月综合| 国产婷伊人| 97热在线精品| 五月天婷婷黄色| 久久久久8888| 婷婷丁香红五月91C| 婷婷五月色色| 天天夜天天色天天| 99色在线视频| 日本在线观看91| 丁香婷婷深情五月亚洲| 9999色色色色| 色狠狠五月天| 欧美日韩五月婷婷| 黄桃AV无码免费一区二区三区 | 久操香蕉| 丁香婷婷五月| 亚洲无码99| 人妻系列久久久久久久久久久 | 五月婷婷人妻| 色婷婷五月基地在线| 亚洲视频无| 少妇高潮A片无套内谢麻豆传| 午夜电影网VA内射| 五月丁香久久综合| 丁香五月婷婷激情尤物| 亚洲综合色激情色五月| 九月婷婷久久| 超碰在线9| 天天天天天天天操| 婷婷五月天视| 香蕉国产2013| 婷婷丁香视频| 懂色av粉嫩AV蜜臀AV| 婷婷天天插天天爱| 26uuu青青| 亚洲色五月婷婷| 香蕉人妻AV久久久久天天| 99色亚洲| 97婷婷狠狠| 天天做天天爱天天做| ...婷婷国产成人亚洲日韩| 综合狠狠干| 九九色情网五月天 | 色五月成人| 最新日韩久热免费视频看看| 精品AV无码超碰| 亚洲精品字幕在线观看| 99热成人| 狠狠操狠狠操| 五月色丁香| 99视频精品全部免费观看| 丁香五月情色| 激情五月天婷婷图| 在线99热| 日韩999| 大香蕉五月天婷婷丁香91| 99热色综合| 五月天丁香婷婷视频网址| 亚洲婷婷五月天| 日日天天干| 五月天色社区| 26uuu| 丁香六月综合激情| 五月天啪啪| 日韩成人中文字幕| 婷婷五月天国产在线播放| 夜夜干天天干| 亚洲国产精品VA在线看黑人| 五月天婷婷色| 玖玖无码中文| a网站免费观看| 九九aV| 亚洲啪视频| 九九综合| 91色色色| 免费观看全黄做爰的视频 | 俺去也五月天婷婷| 色婷婷五月天偷拍| 九九青草热| 激情爱爱网站超大免费| 色色色五月婷婷| 狠狠综合| 91操操| 精品一二三区久久AAA片| 国产日韩欧美| 激情综合色婷婷啪啪五月天| 国产精品18久久久| 香蕉曰比| 91婷婷色| 五月天合网| 天天综合干| 青青福利网| 黄色笑话深爱激情网丁香五月婷婷啪啪啪啪啪| 六月婷婷久久| 久久久99久久| 日本少妇裸体做爰高潮片| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 色婷婷亚洲婷婷| 少妇大叫太大太粗太爽了A片| 无码91中文字幕| 亚州第一黄网| 大香蕉99| 色国产五月| 狠狠色丁香久久婷婷综合五月| 五月天亭亭俺也| 婷婷五月天视频免费在线观看| 亚州色婷婷| 五月丁香激情综合| 婷婷五月天天天| 婷香五月| 丁香六月在线综合| aaa久久| 丁香五月婷婷婷婷欧美综合| 五月天婷婷视频30| 99热这里| 99se丁香| 狠狠综合久久| 日本性激情色播| 色综合九九| 大香伊人婷婷| 久久五月天综合视频网站| 五月天中文网| 丁香六月综合激情| 日本偷拍九九九| 99在线观看视频| 99热日| 色欲午夜无码久久久久久张津瑜| 超碰碰碰碰| 色色婷婷婷丁香五月天| 亚洲视频在线观看99| 天天碰夜夜爽| 99精品无码| 91一道本| 99热久久最新地址| 五月丁香久人妻中文| 一点色成人网| 丁香五月影视| 99亚洲色色| 激情婷婷六月天| www99xxxx五月丁| 成人精品一区二区三区四区五区| 久久丁香五月| 丁香五月婷婷欧美性爱| 色五月婷婷婷婷婷婷婷婷婷婷| 久久久久久久合一狠狠做深爱 | 天天综合网91| 亚洲色视频| 熟女人妻一区二区三区免费看| 五月丁香色情| www综合久久| 久久机热这里只有| 欧美人妻一区二区| 影音先锋男人资源站一区二区| 欧美色六月婷婷| 九九热中文| 野外99热| 色操b| 国产肥白大熟妇BBBB视频| 国产精品视频| 五月天天爽| 97一区二区| 另类的婷婷| 婷久久| 人妖色AV色综合| 五月婷婷婷自由综合| 色九区| 大香蕉精品视频| 天天插综合网| 亚洲AV影片在线观看| 伊人网欧美在线男人天堂五月丁香 | 《久久综合九色综合97婷婷| 日本操逼九九九九58日本操逼| 丁香激情五月天| 久久综合爱| 五月天伊人久久久久| 激情综合网激情五月婷婷| 思思99热在线| 久久久97| 免费成人va| 五月婷六月| 色婷婷综合久久久久| 操骚货在线| 综合久久综合五月天婷婷| 中文字幕 久久9999| 夜精品无码A片一区二区蜜桃| 九九国产视频| AV性爱网| 亚洲激情网站无码| 被强行糟蹋的女人A片| 台湾综合丁香五月蜜桃| 超碰超碰在线| 我爱大香蕉| 99热最新网址| 久久婷婷六月天| 天天插天天爽| 怡红院院在线导航网| 五月天色五月| 2025天天爽天天摸| yw国产AV| 婷婷六月激情| 99ri精品在线| 婷婷无码视频| 国产噜一噜天天噜| 丁香五月婷婷影院| 色99视| 中文成人在线| 五月天婷婷在线播放免费| 影音先锋男人av资源站| 五月天综合在线观看| 26uuu另类亚洲欧美日本一| 五月天久久小说| 欧洲第一久色| 婷五月天六| 五月丁香六月激情| 99久久九九| 超碰久热| 99爱精品视频| AV成人在线播放| 99热最新网址| 深爱激情小说五月婷婷| 26uuu色五月| 五月丁香影院| 久热只有这里有精品| 色偷偷AV亚洲男人的天堂| 在线VA视频| 欧美日本不卡黄色片| 深爱五月婷婷| 五月综合久久| A短视频免费在线观看| 五月婷婷中文字幕| 婷婷六月综合基地| 夜夜操狠狠操| 婷婷.com| 欧美操人| 久久婷婷六月综合国际| www.五月天婷婷| 另类的婷婷| 五月丁香狠狠爱婷婷综合| 激情99| WWW五月天| 久久婷婷综合拍| 亚洲第一成人无码A片| 天天色爽| 五月丁香成年黄色| 丁香激情五月| 激情五月久久| 成人在线精品| 欧美日韩成人综合9| 成人综合视频在线| 天天插天天干天天舔| 六月丁香激情| 俺去也五月| 色天堂在线| 色五月婷婷大| 久久99精品久久久久子伦| 激情五月婷婷| 五月婷婷激情久久| 久久老码第一| 日本久久人| 国产婷婷色综合AV蜜臀AV | 五月婷婷色播视频| 精品热青草| 97人人超| 色中色综合| 色9色| 精品人妻在线| 久草免费福利视频| 成人丁香五月| 久久看婷婷| 五月婷婷欧美激情| www.五月天婷婷.com| 色综合色婷色基地| 婷婷丁香日韩五月| 五月综合激情网| 色五月综合资源推荐| 丁香激情六月天婷婷| 成人在线网| 亚洲亚洲人成综合网络| 丝袜大香蕉| 成人精品亚洲性爱| 99色播| 激情综合女人网五月播播| 婷婷五月天中文字幕| 爱穴久久| 亚洲精品久久久久久久久久飞鱼| 97在线视频观看| 丁香五月天婷婷中文字幕| 亚洲成人乱码av网站| 婷婷免费精品视频| 另类图片色五月| 毛片蕉地一二| 欧美日韩成人综合9| 这里只有精品视频| 天天爽夜爽| 九九九九综合| 日本色99| 五月天丁香婷| 五月激情小说| 五月天亭亭俺也| 五月丁香婷婷成人综合网| 中文字幕日韩无码制服诱或| 热这里只有精| 另类五月婷婷| 美女天天久久| 久久这里都是精品免费| 99热只有精品综合| 久久丁香五月婷婷| 9操在线| 色婷婷综合综合网| 九九99香蕉在线视频播放| 色综合色婷色基地| 日本少妇AA一级特黄大片| 四色五月婷婷| 久久久九九视频精品18| 91九色 熟| 青青草国产亚洲精品久久| 五月丁香| 免费视频WWW在线观看网站| 国产亚洲精品久久久久久郑州| 99久久婷婷国产综合| 色激情五月天| 色区久久| 狠狠精品干练久久久无码中文字幕 | 性欧美日本| 精品成人久久久久久久_一二三四视| 区美毛片子| 色色五月丁香婷婷| 色五月首页| 色婷婷激情| 九九色综合| 国产欧美性成人精品午夜| 秋霞少妇AV网站| 91久久网站| 九九精品碰| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 丁香婷婷色五月| 天天操夜夜操| 色婷插| 啪啪色激情五月天| 日韩精品成人在线| 色九九综合| 日韩一区二区在线播放| 操逼福利视频| 色99网| 五月婷婷激情| 午夜丁香婷婷| 伊人激情AV一区二区三区| 婷婷五月丁香图片人人操| AV中文字幕夜夜操b天天摸bb | 色五月亚洲| 日韩国产在线精品| 色五月色五天色情网址| 国产ava| 五月伊人综合| 亚洲激情精品| 99福利导航| 性爱久久| 99色综合久久| 色婷婷丁香九月| 成人五月天在线观看| 色五月激情基地| 99精品网| 婷婷久久久| 91怕怕网| 欧美三级欧美一级| 亚洲 在线 性爱 | 婷婷成人AV| 五月天色狠狠| 婷婷久久亚洲| 天天干狠狠| 激情综合五月丁香六月婷婷| 久久香蕉福利| 狠狠色丁香婷婷综合久久97AV| 天天激情欧美美女| 九九综合色| 亚洲国产另类av| 一起草av| 婷婷深爱五月丁香| 六月天婷婷| ou洲色吧| 激情久久久久久久久久久| 国产婷婷综合| 97超碰在线免费观看| av国产精品| 9精品视频在线| 激情五月天在线| 婷婷五月天在线视频网站| 操人无码| 国产综合婷婷| 米奇影视五月天| 久久婷婷伊人| 五月天婷婷激情四射综合| 亚洲色涩视频| 另类小说色婷婷| 亚洲字幕AV一区二区三区四区| 五月丁香色综合| 欧美va| 亚洲综合色色色| 久久色吧| 五月色丁香婷婷中文字幕| 亚洲在线综合| 五月婷婷之综合激情在线| 国庆精品久久| 伊人玖玖精品| 美女爆乳18禁www久久久久久| 激情五月天在线观看色婷婷| 超碰高清在线| 五月丁香另类网| 婷婷丁香成人在线视频| 五月婷婷av| 色欧美日| 丁香美女主播视频在线观看 | 九九黄色网| 五月丁香六月婷婷啪啪| www99热| 色狠狠色噜噜AV天堂五区 | 天天摸天天肏| 影音先锋91资源站| 色婷婷激情五月天在线观看| 91人妻PORNY九色大屁股| 亚洲热久| 79色色色色| 国产成人精品一区二三区熟女在线| 在线中文字幕视频| 激情图片久久| 欧洲区自拍| 五月婷婷狠狠干| 久久99网| 九色PORNY自拍成人精彩视频| 情趣视频66| 91麻豆国产三级精品福利在线观看| 丁香六月狠狠| www.夜夜操.com| 天天综合五月天| 亚洲色爱综合| 1024久婷| 色五月在线视频观看| 九九九九精品精| 六月综和久久| 国产乱妇无乱码大黄AA片| 色噜噜狠狠色综| 色~性~乱~伦~噜| 日韩高清久久| 五月婷视频在线| 亚洲操B视频| 婷婷激情图片| 五月久久丁香| 日本成人小说婷婷六月| 七月丁香五月婷婷在线| 三十路磁力链接| 热91久| 人人操超踫| 清纯唯美 激情四射| 亚洲99视频| 极骚大香蕉伊人| site:ornaments52.com| 国产人妻777人伦精品HD| 这里只有精品日韩精品| 午夜不卡久久精品无码免费 | 伊人久久99| 婷婷精品| 玖玖色综合| 色婷婷丁香五月丁香| 欧洲MV日韩MV国产| 操一操插一插| 婷婷六月天| 人人爱摸视频| 综合激情在线视频| 97色婷婷| 99综合婷婷五月| www.99热| 五月天婷婷成人资源站| 婷婷久久爱| 国产成人亚洲综合A∨婷婷| 婷婷五月,偷窥偷拍网| 超碰日日操| 丁香五月天AV在线| 婷婷精品| 五月婷婷久久开心网| www久久久久久久久久久| 亚洲热久久| 91黄址| 亚洲精品白浆高清久久久久久| 婷婷五月天在线综合| 亚洲av免费在线| 久久精品99国产精品日本| 色五月丁香婷婷| 色情五月天视频网| 九九艹女| 久热综合| 五月婷婷丁香六月在线| 欧美啪啪9| 嫩草AV久久伊人妇女超级A| 婷婷情色激情| 成人 视频免费观看网站| 亚洲色五月| 亚洲另类噜噜| 激情五月天99色| 激情色色色| 丁香五月,激情五月,深爱五月| 欧美 日韩 成人| 99视频在线| 五月天亚洲最大成人| 97sese婷婷| 激情五月色婷婷| 玖玖99福利| 色婷婷aV四虎| 丁香五月天社区| 天天弄天天爽| 亚洲在线免费成人| 婷婷少妇激情| 蜜乳国产网站| 亚洲旡码| 丁香五月天成人| 亚洲在线操| 久久精品永久免费| 天堂资源欧日浪女在线播放| 嫩草AV久久伊人妇女超级A| 五月天六月色| 天天人人天天爽| 美国不卡视频| 激情五月婷婷| 色婷五月天激情| 五月天婷婷三级黄| 婷婷五月天综合亚洲| 91精品无码| 亚洲五月丁| 久操福利| 日本波多野结衣视频| 九九久久精品| 九九婷婷网五月天| 五月丁香六月日逼| 七七九色| 久久精品熟女亚洲AV麻豆| av狠狠操| 五月丁香婷婷三级| 四色综合网| 五月天婷综合| 超碰操日| 日本高清久久| 欧美大香蕉视频| 五月丁香六月婷婷视频| 99丁香五月婷| 翔田千里 50岁 无码| 国内9l视频自拍老熟女九色| 激情五月婷婷综合| 丁香五月激情婷婷婷婷在线观看| 久久精品在线| 久久精品91视频| 五月丁香六月停停停| 色色色欧美| 激情综合网激情五月天| 五月天欧美激情| 欧美日韩123| 久婷自拍视频| 久久精品99国产精品日本 | 99热传媒| 亚洲精品白浆高清久久久久久| 开心五月婷婷激情| 五月婷婷丁香狠狠撸久久| 丁香五月婷婷无码AV| 超碰在线免费观看3 9| 强壮的公次次弄得我高潮A片日本 | 淫视馆aV二区一区| 玖玖99免费视频| 欧美性爱五月天| 26uuu国产激情视频| 午夜精品777| 激情综合4月| www.激情.com.| 超碰激情网| 亚州第一黄网| 久久久精品婷婷五月天| 欧美性生交XXXXX无码小说| 无码少妇高潮喷水A片免费| 日本在线va| 99精彩视频| 激情五月天视频| 五月丁香六月婷婷激情网| 五月天亚洲综合网| 日日夜夜干| 97碰碰在线看视频免费| 色婷婷97| www.五月丁香| AA丁香综合激情| 久久久国产精品黄毛片| 1024在线一区| 婷婷六久久| 极品九九九九九九| WWW,五月| 欧美性爱五月天| 国产99美少妇| 激情五月亚洲综合网| 热99re| 色婷婷激情五月天| 五月丁香网站| 婷婷天堂综合| 色999五月色| 激情文学综合婷婷五月天丁香花| 久久这里只有精品视频15| bukadeavzaixian| pom538精品视频| 99热伊人| 五月天小说激情| 99re这里只有精品视频了| 最新va在线播放| 99热这里是精品| 福利视频在线播放| 欧美精品狠狠色丁香婷婷| 色色婷婷色色| 9色在线| 操嫩逼电影| 亚洲五月停停| 婷婷综合| 日韩AV中文在线观看| 综合婷| 九九99在线免费在线观看视频| 丁香六月中文| 国产色99| 欧美日朝成人| 国产精品18久久久| 中文字幕性爱视频| 国产成人网| 婷婷综合五月色播| 碰97久久| 无码免费人妻A片AAA毛片西瓜| 91VIP在线观看| 日韩啪啪网| www国产亚洲色婷婷com| 五月婷丁香| 六月丁香五月婷婷| 亚洲AV永久无码影院黑人| 激情小说五月天| 性生活久久人妻| 中文字幕在线不卡| 91av传媒高清在线视频网| 日熟女| 综合网激情五月天| 丁香五月婷婷五月天| 日本99视频| 激情熟女网| 六月丁香五月婷婷首页| 午夜丁香婷婷| 综合久久婷婷| 男人天堂 久久| 有码人妻久久| 婷婷在线视频| 色视频色综合91| 丁香五月婷婷色情综合| 丁香婷婷六月激情综合| 影音先锋色婷婷| a免费在线| www.久久| 夜夜骑天天操| 男女啪啪做爰高潮无遮挡| 欧美啪啪9| 天天干天天操天天上| 97操在线视频| 丁香婷婷老司机久操| 人妻日日日| 操操人人| 色女伊人| 99这里都是精品| 免费看欧美成人A片无码| 丁香六月五月天| 99综合免费视频| 啪啪操超碰| 久热这里只有精品66| 久色资源| 爆乳熟女一区二区三区爆乳| 一级A片天天操夜夜操| 这里只有精彩视频| 亚洲无aV在线中文字幕| 久久96热| 99热这里只有精品99| 久久久久久9| 亚洲综合热| 九八Av| 99热乎| 91在线日| 丁香五月天堂网AV| 婷婷五月丁香久久| 天天日日夜夜| www久久久| 激情五月天综合网| 91丨九色丨国产打屁股网站| 开心婷婷五月花| 激情综合网五月天| 五月丁香综合激情网| 亚洲最大激情无码| 狠狠色综合无线观看| 久热最新视频| 国产精产国品一二三在观看 | 人人看人人草人人摸| 亚洲久热| 无码四色色色| 亚洲精品国产成人AV在线| 91大屁股精品| 99热在线观看免费精品| 精品操逼一区二区| 久热A| 丁香六月丁香婷婷激情 | 精品人妻伦九区久久AAA片| 色综合网上班开心婷婷久久| 五月丁香福利| 五月丁香花激情综合网| 婷婷欧美| 五月天伊人久久久久| 99热一区| 久久图色4| 99爱视频在线观看这里只有精品| 丝雨一区二区| 久久欧洲综合网| 九月丁香婷婷网| 亚洲国产va| 婷婷丁香精品视频在线观看| 亚洲va欧美va国产综合久久久| 伊久大香蕉| 婷婷五月天电影在线| 欧美A片在线视频免费观看| 婷婷激情丁五月| 日曰躁夜夜躁2026| 色五月色五天色情网| 久久九九激情五月天 | 任我肏视频精品| 激情丁香五月天图片| www. 五月. com| 五月天激情婷婷| 91互操| 亚洲不卡| 丁香五月成人| 久久久久9999| 色五月 激情婷婷 综合五月天| 亚洲精品白浆高清久久久久久| 五月色婷婷AV| 亚洲无码影片| 六九色综合婷婷五月天| 日韩黄色网络| 97自拍视频在线| 再次出发二| 日韩限制级大尺度黑料泄密大尺度视频一区二区在线观看 | 一起操 91N.com| 亚洲熟妇无码乱子AV电影| 97人人看| 亚洲成人综合在线| 亚洲国产精品成人va在线观看| 骚逼视频一区2区| 日韩啊啊啊| 婷婷五月天黄色| 久热9| 五月亭亭综合五码| 69人妻人人澡人人爽久久| 成人 在线 日韩| 安息电影在线观看完整版| 婷婷五月丁香激情| 99色视频在线| 精品久久99| 无人区码一码二码三码医生系列| 色五狠狠| 99九九在线精品热动漫| 亚洲无码99| 亚洲噜色| 操日视频| 丁香五月影院| 99亚洲日韩| 九九久久五月天| 国产XXXX搡XXXXX搡麻豆| 人人爽欧美婷婷久久久五月丁香 | 色五月婷婷五月天| 色五月婷婷狠狠撸| 九九久久偷拍| 五月婷色色| 亚洲成人乱码av网站| 超碰av天堂| 五月丁香网站| 99热6这里只有精品| 91九色首页| 九九精品免费视频99| 99色热视频| 亚洲性爱99在线| 久热亚洲| 国外亚洲成AV人片在线观看| 五月天久久91| 综合五月草| 91操在线| 色色婷| 十一月婷婷激情四射| 亚洲性爱干干| 91日韩美女被插视频| 亚洲乱码日产精品BD| 成人网在线视频| 色婷婷丁香AV综合|