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
返回資訊列表
久色资源网| 欧美性爱五月天| 99草在线免费观看视频| WWW免费视频碰碰碰碰| 热久69| 99亚洲精品视频| 色色九九五月天 | 色丁香五月| 久综合九| 99综合网| 激情内射p| HD久久精品视频| 丁香五月天激情视频| 国产午夜精品一区二区| www.99视频| 激情播丁香| 五月丁香婷婷激情图片| 色啪影院| 婷婷五月噜噜| 97色色婷婷| 激情婷婷五月天| 天天干天天干天天干天天干天天| 1999天天操夜夜操| 三男玩一女三A片| 婷婷色Av| 丁香九月婷婷综合| 182tv992tv人之初午夜免费观看| 久久婷婷综合基地| 五月天激情小说婷婷基地| 极品嫩草| 狠狠穞A片一區二區三區| 婷婷丁香人妻天天久久| ww亚洲ww在线观看| 日韩成人电影Av| 亚洲婷婷免费| 中文av网| 婷婷五月天免费| 大香蕉七区| 色婷婷激情| www开心激情网| 九九视屏| 欧美熟女视频 色婷婷| 99久精品视频| 九九精品在线网| 国产精品99久久久久久猫咪| 激情综合九| 伊人久久婷婷| 99色热| 久久丁香婷婷五月天| 天堂伊人干| 在线观看欧美| 色婷婷五月天视频在线| 色婷婷婷婷成人网| 超碰99在线观看| 九九XX视频| 日本久久婷婷| 婷婷五月激情网| 婷婷五月天六月综合| 97黑人精品区| 性爱五月婷婷| 91人妻九色大屁股| 青草视频在线观看视频 | 美女要搞搞天天搞搞搞网站| 婷婷丁香黄色| 丁香狠狠干| 激情人妻综合| 五月天婷婷婷| 五月天色五月天| 婷婷色五月天色| 五月天色婷婷综合| 超碰人人色| 色天天综合成人网| 91精品熟女| www综合久久| 欧洲色区| 九九这里有精品| 婷婷成人五月天成人文学小说| 婷婷丁五月| 丁香五月婷婷激情中文| 欧美综合激情| 色婷婷影院| 天天狠狠六月婷丁香影院| 九九国产视频| 超碰超碰在线| 色情五月天。| 五月花激情网| 一区二区你懂的| 狠狠色综合网| 欧美色色色| 婷婷王月天影院| 丁香色情五月天| 九月激情综合婷婷| 婷婷精品综合| 激情婷婷九月| www综合久久| 无码少妇高潮喷水A片免费| 色婷婷免费观看| 可以直接看的AV网站| 国产成人综合网| 五月花激情网| 日逼影音先锋AV男人资源站| 久777| 色色五月婷| 97资源欧美日韩大香蕉超碰一区| 狠狠爱五月婷婷| 激情婷婷五月天在线观看| 91ncom.色| 任你干嘛免费视频播放| 99久久色| 射琪琪| 色99自拍| 丝袜激情网| 青青草原爱爱网| 欧美婷婷色| 免费观看18视频网站| 天天操人人干| 97人人操在线| 欧美精品999| 亚洲精品视频在线| 99视频在线| 色情五月丁香| 天天日综合| 超碰在线人妻| 色婷婷久久| 丁香成人五月天| 二色AV| 日本九九网| 亚洲激情视频在线观看| 婷婷丁香五月天综合AV| 六月色日韩| av九九| 四虎成人精品永久免费AV九九| 噜噜狠狠色综合久| 五月天激情图片| 九热免费视频| 五月天激情小说| 丁香久久| 五月婷婷丁香大陆免费| 九热视频| 久热中文字幕| 五月花婷婷| 久操操| 深爱五月天| AA丁香综合激情| 亚洲V国产V欧美V久久久久久| 99热在线播放| 五月婷婷中文字幕| 五月婷婷色播| 玖玖热视频| 五月天偷拍| 大香蕉520| 嫩BBB槡BBBB搡BBBB| 五月色情| 超碰色人妾| 黄色一级影片| 夜夜操夜夜爽| 天天色天天色天天色天天色天天色| 色情五月天婷婷| 久久99性爱| 婷婷婷婷婷婷婷五月丁香| 久久婷婷五月天蜜桃| 99热综合| 丁香六月啪啪| 九九 激情 网| 国产在线6| 亚洲综合色丁香五月天| 亚洲精品国产精品乱码视99| 久久9视频| 色欲天天综合网| 丁香五月五月婷婷欧美大香蕉| 嫩模草| 婷婷五月天大香蕉| eeuus五月婷| 婷婷基地五月色| 天天做 天天爱| 久久久久网站| 大地9中文在线观看免费高清| 开心色色五月天综合| 色五月,婷婷大香蕉| www.色色五月天.com| 久久视这里只有精品| 99精品7| 婷婷久久色| 91操熟女| 大香蕉视频99| 激情综合啪啪啪| 久久99久久99久久99人受| 99操久久| 99精品久久久久久久婷婷久久| www.色综合.com| 久久婷综合| www...com黄在线观看| 99热热热国产超碰| 国产寻花在线| 五月婷精品| 天天做天天爽| 日本美女上人| 99热这里只有精品在线播放| 丁香五月AV| 亚洲综合色成丁香五月色| 无码A片一区二区免费| 丁香五月六月久久综合| 99视频精品全部观看10| 婷婷日日夜夜| 久久色情| 超碰色婷婷| 激情丰满熟妇五月| 99久久激情视频| 99久久综合狠狠综合久久| 五月香蕉网| 色色五月丁香| 欧美色五月| 第九色区av天堂| 玖色色综合| 五月天免费色| 婷婷五月天久久久| 狠狠爱五月婷婷| 天天操天天操| 天天综合精品| 啪啪婷婷五月天激情| 色丁香婷婷美女视频网站| 97热精品| 婷综合六月| 色综合爱综合| 超碰免费人人| 综合网色| 99热老网站| AV中文字幕夜夜操b天天摸bb| 丁香蜜臀黄色婷婷五月天| 婷婷五月六| 成人做爰黄A片免费看直播室男男| 91人人网| 在线观看婷婷5月| 伊人网色婷婷五月天| www.婷婷| 天天射综合网站| 久久99日本精品视频免费观看| 色天天综合色| 丁香五月av在线| 99啪啪| 99 福利 导航| 婷婷丁香五月高清| 婷婷色色宗合网| 天天日人人| 久久婷婷六月综合| 思思热久久艹| 色色色色色色色色五月先| 冬月かえでAV无码播放| 九九久久网| 婷婷五月丁香基| 激情婷婷综合| 天天干夜夜谢| 丁香五月天天日| 日日杆天天| 另类精品视频在线观看| 色婷婷中文在线| 综久久久| 欧美精品18| 国产人人操| 亚洲精品国产精品乱码不99| 日碰日| 婷婷丁香五月天小说| 99久在线精品99re8热| 色五月天影视| 五月婷婷久久大香蕉| 九九热99视频在线| 丁香色色色| 超碰人人射| 99热精品在线播放| 五月丁香成人网| 99热综合| av在线播放网站| 丁香六月婷婷综合麻豆| 婷婷五月丁香综合网| 深爱五月中文字幕| 亚洲六月综合激情久久下卡| 婷婷五月激情在线视频| 香蕉伊人综合| 久九色| 日良久久| 亚洲日韩一页精品发布| 久久成人天| 99久久综合狠狠综合久久| 美女美女美女三级色天天天天天| 玖玖玖婷婷婷| 综激情网| 五月天色播网| 色色五月婷婷狠狠| 五月丁香六月色| 天堂爱啪啪| 丁香六月激情四射| 丁香五月综合色婷婷| 国产肥白大熟妇BBBB视频| 丁香六月激情综合网| 久久se 综合网| 九九久热| 9精品在线| 久久九九99| 亚洲五月天第一综合干| 五月天天丁香婷婷| 久久婷婷网| 久久婷婷青草五月天| 亚洲成人在线播放| 99青青草| 婷婷五月天综合网| 欧美VA在线| 亚洲顶级VA在线观看-高清完整版在线影院观看-S022AV | 婷婷五月丁香激情| 色老久久| 婷婷免费成人视频| 久久网婷婷| 99ri精品视频在线观看| 成人色五月天| 婷五月天丁香婷五月| 91色涩| 色欲婷婷夜夜| 亚洲在线播放| www色婷婷| 婷婷丁香在线播放| 开心婷婷五月天综合| 亚洲情综合五月天| 国产精品国产| 色婷婷五月天成人网| 青青日韩| 办公室少妇激情呻吟A片在线观看| 亚艹艹| 999婷婷综合| 国产高潮A片羞羞视频涩涩| 婷婷六月五月| 色波激情五月天| 亚洲无码性爱| 囯产精品久久欠久久久久久九大| 五月天婷婷视频| 第四色色六月色综合| 九九婷婷综合| 婷婷开心激情五月激情网| 夜夜资源站| 婷婷五月天成人网| 婷婷欧美综合| 五月情婷婷| 热的五码久久精品| 天天色99| 精品热青草| 丁香五月色情| 日本在线va| 激情五月天综合图片小说网站| 天综合日日夜综合7799| 无码免费人妻A片AAA毛片西瓜| 丁香婷五月天开心六月| 五月天激情婷婷丁香| 丁香六月色婷婷| 九九成人电影婷婷| 丁香五月成人| 国产三级片91| 丁香五月婷婷五月天| 26UUU亚洲欧美| 日本超碰在线| 五月婷免费视频| 婷婷在线视频| 亚洲色网络| 婷婷八月丁香激情综合| 操逼棍操逼| 思思视频久久| 99热在线爱| 婷婷五月丁香亚洲| 无码人妻少妇色欲AV一区二区| 免费AV在线| 思思热久久爱| 色婷綜合网| 天天搽天天射| 91精品综合久久久久久五月丁香| 欧洲S级在线观看| 丁香五月天AV在线| 亚洲亚洲人成综合网络| 久久婷婷五月天| 久久 婷婷 五月天| 久久久无码精品成人A片小说| 99秘 在线| 亭亭丁香aV| 9精品在线| 色婷婷情片| 色色色色色色色五月| 久久久人妻| 日韩欧洲亚洲| 亚韩在线视频| 欧美婷婷日本| AV五月丁香| 久草热在线视频| 五月开心深深爱激情综合| 《》【无码】想被搞到爽AV应募而来的超M素人 西纯子 10musume-011723-01 | 婷婷五月婷婷五月天| 可以免费观看的av网址| 婷婷五月天成人在线视频| 婷婷五月激情的图片| 丁香婷婷久| 五月天福利影院导航| 久热9| 丁香六月色婷婷| 婷婷五月天精品| 欧美日韩成人免费在线| 日本激情91| 五月综合色| 婷婷五月天视频亚洲| 亭亭五月天成人| 中文不卡一二区| 99在线国| 丁香成人色情五月天| 丁香婷婷十月| 婷婷色五月色| 五月天久久综合婷婷| 夜夜爱网站| 亚洲这里只有精品| 91激情五月开心| 九九热免费视频| 97干婷婷| 日本系列_4页_777FP| 婷婷色操| 99亚洲视频| 伊人婷婷五月天| 99色热| 国产精品久久久久久久久久| 五月丁香亭亭电影久久| 国产99久9在线+|+传媒| 色婷婷久久视屏| 色婷婷丁香九月| 国产97色在线| 美妞av| 激情小说五月天中文字幕| 色丁香婷婷美女视频网站| 亚洲色色色色| 天天日夜夜爽| 中文字幕在线日亚洲9| 亚洲精品99| 91色呦哟| 啪啪六月婷婷| 五月欧美色播| 五月天社区狠狠| 狠狠色噜噜狠狠狠狠综合| 97色在线观看视频| 高清无码网址| 丁香婷婷激情四射五月| 91人妻人人操人人爽| 婷婷丁香五月亚洲欧美| 去干网最新版本亚洲版| 丁香六月婷婷色播| 99精品偷自拍| 婷婷五月色图| 五月天婷综合网站| 婷婷亚洲欧美丁香五月| 日本一级黄色电影| 成人五月丁香花| 五月婷婷丁香网| 综合色99| 婷婷激情五月天小说| 久久久久久久人妻| 五月综合激情| 啪色综合| 五月丁香网站在线播放| 久久久久人妻精品| 99热9| 久久亭亭电影| 五月在线婷色| 狠狠干婷婷| 色婷婷综合网| 亚洲精品九九| 人妻久久久久久久久妻久久久久久久久| 亚洲看av的网站| 思思热在线视频精品| 深爱婷婷网| 狠狠干五月| 99久久玖玖| 国产婷婷五月中文字幕高清| 久久免费精彩视频| 亚洲V国产V欧美V久久久久久| 91窝窝| 丁香婷婷六月激情文学| 激情五月天小说|五月天开心激情网|亚洲精品国产自在现线|黄色五月天 | 激情五月天小说网| 免费操超碰| 婷婷婷色五月| 九九99九九99偷拍视频免费看| 亚洲精品又粗又大又爽A片 | 日本久久视频| 色综合久久88色综合天天| 久久久精品色| 欧美精品A片一区在线观看| 日韩色色小视频| 五月六月伦理| 国产在线激情视频| 99亚洲天堂| 五月开心激情| 97日韩无套内| 五月婷婷亚洲综合网| 蜜桃人妻无码AV天堂三区| 成人精品一区日本无码网| 丁香密臀AV激情网| 骚货艹网站视频| www.夜夜| 婷婷综合五月天| 色婷婷五月天视频在线| 超碰日韩成人| 开心五月激情| 色色五月丁香婷婷| 91av视频在线观看最新网址| 五月婷婷干| 亚洲综合另类| 性日本激情| 国产无人区大片| 级人人91| 久久五月热| 五月丁香天天| 超碰91在线| 99九九综合久久九九| 可以观看的AV| 婷婷五月久久| 欧美日韓成人亚洲精品另类| 久久综合99| 天天肏在线观看| 激情六月天婷婷| www.91av.com| 激情纯色婷婷五月天在线不卡视频| 亚洲精品无码久久| 97人人搞| 久久婷婷综合基地| 九九大香蕉黄色影院| 日韩在线婷婷五月天综合| 中国女人内射6XXXXX| 亚洲色久| 婷婷丁香五月亚洲| 五月婷婷免费在线| 国产午夜一区二区三区| 96丁香六月婷婷蜜桃综合久久| 天天人人人人人人人人人人人| 婷婷五月丁香四射| 99热日韩| 五月丁香婷婷激情爱爱| 99性爱精品| 香蕉婷婷五月| 欧美色色色| 一本色综合色| 国产日韩欧美性生活| 中文成人在线| 岛国av网| 五月激香蕉网| 婷婷丁香人妻天天| 欧美色色日韩| 日日干日日| 激情伊人网| 九九色色| 碰碰91| 操一区| 婷婷五月天色| 成人无码精品1区2区3区免费看| 99这里只有精品国产| 久久草大香蕉| 可以直接看的av网站| 亚洲亚洲人成综合网络| 色五月天视频| 一级七香蕉| 五月婷婷中文字幕AV| 操99| 五月天婷婷自拍图片在线观看| 91啪啪视频| 这里只精品| 91精品综合久久久久久五月丁香| 99热精这里只有精品| 色婷婷丁香女女| 这里只有精品视频在线看| 99riAV成人在线视频| 激情亚洲网| www.97干视频| 狠狠色狠狠操| 我爱va亚洲va52| 久久成人亚洲欧美电影| 婷婷综合五月天| 大香蕉中文| 99性视频| 亭亭色天香| www网站在线观看| 999激情视频| www.久久| 综合色在线| 色综合久久88色综合天天99| 丁香色色色| 综合激情五月天| 五月丁六月婷| 五月丁香久久呀| 成片免费播放| 五月婷在线播放| www久久久久久久97| 97精品综合| 中文国产五月天| 91久久综合亚洲噜噜成人在线 | www.激情五月天。com| 国产亚洲成AV人片在线观黄桃| 九九热视频免费| 97欧美在线| 色色色999| 婷婷开心久久| AV中文在线| 久久婷婷精品| www.色五月| 99久热这里只有精品视频删减版| 99欧美精品99日本精品| 99九无网码| 丁香五月另类小说在线阅读| 丁香五月激情月| 99热亚洲| 精品久久99码| wwW天天干| 免费观看日韩成人av| 五月婷在线观看| 翔田千里无码| 丁香九月婷| 九色视频九色九色91jiuseshipin| 99这里都是精品| 思思热思在线精品视频| 五月天停停日日| 天天插天天插| 99re在线视频| 亚洲五月天狠狠| 淫视馆aV二区一区| 久久婷婷六月综合综合| 亚洲日韩一页精品发布| 另类视在线| 丁香五月丁香伊人| 日韩成人电影AV| 久久99精品久| 精品夜夜澡人妻无码AV| 成人电影在线免费试看| 激情五月色综合国产精品| 99爱99操| 色播色丁香五月| 九月丁香婷婷| 伊久久婷婷| 国产精品国产| 深夜婷婷 丁香| 丁香五月色| 这里只有精品免费视频| 丁香婷婷少妇| 欧美日韩999| 人妻操日日| 国产高清av黄色看片| 婷婷午夜天| 五月天婷婷视频小说| 久热最新视频 | 婷婷丁香色女人| av大香蕉| 99视频只有精品| 色五月综合激情| 亚洲 在线 性爱 | 六月婷婷视频| 人人爽天天爽| 人人摸人人干人人做| 久久激情综合| 色五月综合网| 中文字幕视频在线播放| 丁香五月97视频| 综合色、色综合| 99热免费| 五月丁香激情综合网| 99久在线观看| 婷婷五月天网址| 婷婷综合精品视频97| 色 五月俺去也| 人人操Av| 亚洲黄色影视| 婷婷狠狠97| 五月婷婷9| 久久久日韩特色特黄AAAA| 9久久精品| 久久丁香五月天| 97干在线| 99热综合网| 五月天色五月| 91超级碰| 丁香五月影院| 丁香六月婷婷久久综合| 超碰99在线| 亚洲综合99| 天天操综合网| 91超级碰| 日韩一级一片内射视频4K| 三十熟女| 中文字幕视频色婷婷| 嫩BBB搡BBBB榛BBBB| 国产FREESEXVIDEOS性中国| 中文人妻AV久久人妻18| 五月天激情小说| AA片在线观看视频在线播放| 大学生高潮无套内谢视频| 超碰在线caop| 综合久久十| 91seAV| 97自拍99| 日韩AV片| 五月丁香六月色婷婷综合五月天| WWW.激情| α久久| 开心激情色婷婷五月天| 99热这里只有精品1998| 九一99| 丁香五月成人社区| 操九色| 99久久婷婷| 97人人干人人操| 大香蕉久久| 婷婷五月综合国产精品| 午夜丁香 婷婷| 熟女网站久久| 噜噜噜噜噜在线| 人人色性网| 五月丁香色婷婷综合| 婷婷六月激情在线视频| 五月精品| 久久九九99| 国产在线网| 91seAV| 婷婷五月激情图片| 青青草a在线| 青草激情在线| 婷婷久久精品| 亚洲激情五月| www.色多多婷| 亚洲第一成人无码A片| 欧日美女Va| 激情五月视频| 色综合五月天| 丁香五月性| WWW.亚洲无码| 五月丁香激情婷婷| 天天爽天天日人人爱| www,天天干| 激情色播| 五月成人丁香av91| 婷婷九月在线| www.天天干.com| 久久人妻人人槡| 性欧美日本| 色婷婷六月| 丁香婷婷综合色五月激情国产基地| www.91在线观看| 亚洲视频色色| 久久久久久人妻| 亚洲操人| 亚洲av网址| 天天摸.天天mo| 亚洲无码色色| 99视频只有精品| 九九九九中文字幕| 激情图片亚洲| 丁香六月婷婷综合欧美| 国产这里只有精品| 97色碰碰公开视频| 九色91美女| 色五月丁香六月婷婷| 成人视频一区| 91制片厂久久久国产电影| 高清视频一区| 99r这里只有精品在线观看| 99九九精品| 超级碰碰一区| 夜夜天天天天天干天天爽| 在线天堂9| 伊人高清无码| 五月婷婷免费在线| 99热激情| 久久人妻熟女一区二区| www:99热视频| 激情婷婷六月| 激情五月婷婷| 午夜丁香综合婷婷| 丁香婷婷久久综合在线| 99热这里只有精品22| 麻豆忘忧草午夜| 丁香五月在线伊人| 色情五月综合婷婷| 激情骚五月| 色欲五月天| 九九黄色网| 香蕉伊人综合| 伊人狠狠操| 婷婷丁香成人| 九九热这里只有精品7| 久久99网| 亚洲综合色成丁香五月色| 日韩欧美五月丁综合| 五月天精品| 教师性爱毛片| 日本婷婷丁香五月| 激情深爱五月天| 婷婷少妇激情| 五月天亭亭俺也| 激情五月天天| 丁香婷婷射| 婷婷金品综合视频| 成人电影在线免费试看| 天天插天天插| yiqicaoav| 丁香五月第四色88| 性做久久久久久久免费看| 免费黄色片子| 91丨九色丨熟女丰满| 中文字幕无线久必| 99热骚货| 亚洲精品V天堂中文字幕| 99啪啪| 久久久激情视频| 狠狠色五月| 久久久久久性爱视频| 丁香六月激情| 99er6| 亚洲天堂久久| 噜噜色五月| 97色碰| www.99久久久| 婷婷的久久网站| 67194成I人在线观看线路1| enecarbon-materials.com污K127封锁请涟系@wip1688 | 五月婷在线色视频| 99re热视频这里只精品| \\五月天婷婷激情| 国产69久久久欧美黑人A片| 久久婷婷五月国产色综合激情| 亚洲综合视频在线| 97色久| www.婷婷六月天| 91人操| 狠狠色丁香| 在线日韩视频| www色五月| 天天爽爽日日做做| 99热这里只有精品8| 久久久精品视频79| 这里只有精品视频99| 任你爽视频| 这里只有精品免费视频| 天天日天天做天天舔| 五月婷婷AV| 九九日本视频| 99热思思| 人人草人人爱手机视频看看| 超碰九热| 婷婷五月激情天| 狠狠情色| 亚洲中文字幕AV| 色婷婷综合视频| 九九成人| 思思久热| 婷婷99丁香| 91丨九色丨熟女丰满| 武则天精品久久| 久久丁香五月| 丁六月激情| 九一九九黄色| 991精品在线视频| 亚洲精品99| 亚洲第一综合| 台湾佬天天日丁香婷婷五月天| 99久久婷婷综合| 久99热在线观看| 丁香五月天在线观看视频| 日本三级韩三级99久久| 丁香五月在线观看综合| 4399精品一区二区| 色色色色色色色色色色色色色97| 亚洲美女高潮久久久久久69| 成人做爰A片免费看视频| 我要射综合| 99热99思午夜精品| 丁香啪啪| 99久久思思| 伊人成综合五月婷婷| 综合五月婷婷| 六月天无码网址| 综合www色| 五月天天天色| 六月婷婷激情小说网| 99热全是精品| 成人精品在线| www.丁香五月| 日韩在线一级| 大香蕉人妻| 欧美狠狠地| 99热在线观看99| 国产免费一区二区在线A片视频| 久热这里只有精品视频6| 97超级操操| 天天肏夜夜肏| 欧美国产一区二区三区| 99.N在线视频| 怡红院AV亚洲一区二区三区H| 激情五月婷婷六月丁香| 九九碰九九爱97| 丁香婷婷欧美综合| 91无码视频| 婷婷五月精品在线| 91九色精品女同系列| 午夜69成人做爰视频| 亚洲无码99| 久久综合网免费视频| 丁香花五月天社区| 性综合网| 色播五月天激情| 色久婷婷网| 精品九九网| 玖玖在线视频| 97碰人人操| www.五月激情.com| 成人在线日韩欧美| 国产SUV精品一区二区6| 久热99热| 久久婷婷操| 99色干| 97偷拍在线视频| 国产日韩欧美性爱| 国产激情婷婷| 久久av电影| 色丁香婷婷| 丁香五月激情五月| 蜜臀AV在线观看| ww久久| 99re这里只有精品视频了| 99久久精| 亚洲色图81p| 成人国产欧美大片一区| 国产在线黄色| 无码 色| 久久AAAA片一区二区| 99色五月| 五月天色软件| 丰满少妇猛烈A片免费看观看| 九九99九九99| www天天色天天射| www.久久五月天.com| 五月婷中文字幕| 免费观看全黄做爰的视频| 五月天.com| enecarbon-materials.comWu染请涟系Bao护@wip1688 | 九九色综合九九色| 色色无码| 日韩三级高清无码| 亚洲 无码 中文字幕 中出| 日本久久网| 日韩黄色网络| 久久九九亚洲| 亚洲字幕AV一区二区三区四区 | 五月丁香在线观看| 国产婷婷五月天| 久色欧美| 久久精品国产色| 婷婷六月激情小说网| 色婷婷丁香九月| 亚洲国产色婷婷| 亚洲狠狠爱婷婷| 国产免费一区二区在线A片视频| 狠狠操狠狠爱| 五月天另类视频| 人妻VideOssS人妻| 丁香五月综合在线| 这里只有精品99视频| 99精品在线播放| 9久国产精品| 久久精彩视频99| 婷婷五月在线| 黄色av网站在线免费播放| 青青久在线视频免费观看| 激情五月天影院| 色婷婷狠狠爱| 激情久久久| 丁香大香蕉| 日韩超碰在线| 婷婷内射视频在线| 日韩一级网站| 97碰| 久久92| 亚洲操精品| 人妻久久婷婷| 91婷婷五月天嫩女| 99这里| 色婷婷的五月天| 夜夜爽天天干| 五月婷av| 久久综合天天综合| 久久人妻伦理| 色 色 色综合com| 可以直接看的av| 五月天色婷婷综合| 婷婷五月中文字幕国产| 亚洲国产色色| 天天激情| 五月丁香激情综合久久| 五月天婷久精视频| 国语精品探花| 婷婷成人五月天成人文学| 婷婷激情综合| 激情婷婷五月天| 激情AV在线| 丁香婷婷网| 色婷婷六月| 久久人妻熟女一区二区| 综合色色五月| 99碰碰碰| 99婷婷综合| 99精品国产在热久久婷婷| 骚五月婷婷| 99热自拍| 99er国产| 久久视频这里99| 夜夜爽天天爽| 黄网免费看| 婷婷五月天综合在线| 丁香五月综合| .精品久久久麻豆国产精品| 91紱請| 大香伊人婷婷影院| 色情婷| 26uuu丁香婷婷五月| 色久播播| 五月婷婷免费| 亚洲色99| 91丁香五月| 五月综合色| 99色在线观看视频者| 激情婷婷综合网| 免费黄色AV| 丁香五月自拍| 丁香婷婷五色月| 99精品色| 成片免费观看视频大全| 五月婷色| www.色色com| 五月激情综合网| 国产精品色色| 九九综合网| 97久久精品| 69er小视频| 天天插天天爱| 久久九九色| 五婷婷综合网| 无码人妻激情| 思思热性操| 天天日 天天草| 五月激情在线| 91大神在线免费看视频全集男男一起操| 国产免费一区二区三区三州老师F1F1.CC | 婷婷色播六月无码| site:ornaments52.com| 生活片五区| 亚洲乱码日产精品BD| 久久182| 色色日韩网| 能直接看的av网站| 九九婷婷网五月天| 9热超碰| 在线视频另类| 婷婷五月视频| 激情伊人五月天| 99久久婷婷国产综合精品| 九月综合| Se.婷婷五月天| 九色啦蜜臀| 五月激情天| 99热欧美精品| 激情婷婷五月久久| 九九视频在线| 久久综合婷婷| 婷婷五月天丁香激情| 99re这里只有精品国产99| av在线免费网站 | 色综合久久88色综合天天人守婷| 婷婷综合一二三| 香蕉久久国产AV一区二区| 任你操精品免费| 九九爱看亚洲| 伊人久久婷| 激情五月天综合网站网站网站| 亚洲、欧美、国产另类笫二区| 这里只有精品99www| 九月综合| 五月丁香花成人社区| 色色丁香五月天| 色色性爱视频| 中文成人在线| 色色免费网站| 另类五月激情| 亚洲 在线 另类| 久久五月综合| 久久538| 人人爱操| 五月丁香色色网| 开心婷婷丁香五月| 影音先锋自拍网| 六月丁香婷婷五月天| 激情av在线| 级人人91| 五月综合婷婷开心网| 日本色五月婷婷| 色情婷婷久久五月天| 怡红院院在线导航网 | 激情综合文学| 五月激情婷婷开心五月| 色播婷婷大香蕉| 伊人综合婷婷| 久久人妻人人槡| 被男人添B超爽视频| aaaaa不卡| www,色婷婷| 2021日韩无码| 久久开心五月婷婷| 日韩黄色中文字幕| 久久这里只有国产| 婷婷五月天久久| 伊人色五月| 丁香婷婷视频在线| 91无码一起草| 狠狠色丁香婷婷基地| 96精品久久久久久久久| 婷婷五月天午夜激情影院| 五月丁香花激情综合网| 99国产精品白浆在线观看免费| 大香蕉狼人久久| 欧美乱码国产一级A片| 99热伊人综合| 狠狠色婷婷六月激情网| 激情五月天色播| 丁香五月综合久久八| 开心五月婷婷激情| 色色色99| 色婷婷88| 中文字幕成人影视| 九草性爱| 日韩啊啊啊| 国产性爱一级| 类似婷婷激情综合网站| 亚洲欧洲小视频9| 色综合伊人网| 五月丁香五月丁香五月丁香五月丁香91| 五月婷婷激情综合视频| 91九色超碰| 成人视频婷婷| ww超碰在线| 情久久综合五月天| 色色色五月| 色噜噜狠狠插综合| 97超碰9久热婷婷热| 日韩欧美一级大黄网站| 色婷综合| 激情五月婷婷丁香| 五月丿香啪啪| 96丁香六月婷婷蜜桃综合久久| 18久久| 婷婷久月| AA久久| 开心五月深爱五月| 月月AV| 成人美女网| 天天搞天天色综合| 五月色丁香婷婷综合| 国产性爱亚洲是图| JlZZJlZZ8JlZZ亚洲熟女| 六月丁AV| 六月激情丁香一道本7777| 丁香婷婷激情| 欧美色婷婷| 五月天社区| 婷婷玉月丁香五月在线视频| 疯狂做受XXXX高潮A片| AV 3P| 国产亚洲99久久精品熟| 开心激情网五月| 99日精品视频| 五月婷婷中文字幕| 狠狠另类视频| 丁香五月婷婷综合激情啪啪啪| 色色cOm| 丁香五月天天| 婷婷五月天综合在线| 亚洲综合五月天婷婷丁香| 亚洲视频99| 色国产五月| 婷婷色狠狠| 五月婷婷丁香啪啪| 综合久| 久久久性爱视频| 欧美五月丁香啪啪响视频| 精品国产乱码久久久久久免费| 韩国婷婷丁香五月| 夜色.cnm| 六月丁香色色| www色婷婷| 丁香五月五月婷婷欧美大香蕉| 亚洲bt丁香五月天婷婷激情小说| 熟美女麻豆| 能看的av| 色偷偷狠狠| 99久超碰| 欧美日本韩国亚洲| 橾逼网| 淫视馆aV二区一区| 一本久久婷婷| 久久性刺激| 99激| 999久久久国产精品| 亚洲中文乱字字幕在线永久| 精品国产人人爱人人| 影音先锋综合网| 天天狠天天叉| 丁香五月激情性色郤| 激情综合在线观看| 熟妇无码乱子成人精品| 99热无码首页| 一起草无码视频| 碰超亚洲| 欧美人人操| 99热这里只有精品官网| 精品牛仔裤超碰| 香蕉AV777XXX色综合一区| 人人操人人干AV| 婷婷综合五月天激情| 啪啪五月综合| 欧美成人精品A片免费一区99| 激情深爱综合网| 婷婷精品| 激情碰碰碰| 丁香五月久久| A网在线欧洲| 9999热在线观看| 亚洲人妻av| 久久婷婷视频| 99热大全在线观看| 亚洲一二三网| 色色99| 丁香五月婷婷激情123| 亚洲欧美国产A片免费观看| 天天爽天天| 人人视频人人干人人做| 91ncom.色| 青青色com久久| 五月天婷婷基地| 狠狠干五码| 欧美在线看| 人人操AV| 五月天操逼网| 婷婷色基地| 思思热在线视频观看精品| 无码橾| 天天日P天天射P| 99视频自拍| 丁香五月婷婷激情蜜桃| www,久久久| www.金莲av| 婷婷综合五月天| 91色吧网| 色婷婷在线视频久| 五月天婷婷基地| 97色视频网| 区欧美日韩成人| 99久久99久久综合| 日韩在线视频网站| 六月丁香综合| 五月天四色房丁香| 色色色婷婷五月| 色色色色色综合| 色图亚洲91| 日韩色色色色|