久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

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

Hive導入導出CSV全攻略:從建表到踩坑實戰(zhàn) 1. 項目背景與核心訴求解析做數(shù)據(jù)開發(fā)的同學十有八九都跟CSV打過交道。CSV這玩意兒說簡單也簡單就是個逗號分隔的純文本文件說麻煩也麻煩——編碼問題、引號轉義、換行符不一致每一樣都能折騰人半天。我自己在實際項目中接過不少這樣的需求業(yè)務方丟過來一個幾GB的CSV文件讓我塞進Hive表里做分析或者反過來讓我把Hive里跑完的結果導出成CSV發(fā)給下游系統(tǒng)或者交給產(chǎn)品同學做報表??此苾蓚€方向的操作背后的細節(jié)其實多得超出大多數(shù)人的預期。這篇內(nèi)容我圍繞“Hive導入導出CSV全”這個主題把從建表、加載、導出到踩坑排查的完整鏈路都梳理一遍。無論你是剛接觸Hive的新手還是已經(jīng)寫了幾年HQL的老手只要跟CSV打過交道里面總有幾條經(jīng)驗能幫你省下半天排查時間。我會把每一步為什么要這么做、參數(shù)背后的原理講清楚而不是丟給你一堆命令讓你盲目復制。先說清楚這篇的核心覆蓋范圍包括Hive內(nèi)部表與外部表的選擇邏輯、CSV文件與Hive表字段的對應關系、LOAD DATA和INSERT OVERWRITE兩條主路徑、各種分隔符和轉義符的處理方式、以及導出時常見的文件合并、壓縮格式、編碼轉換等實操問題。每一條都是我在真實業(yè)務環(huán)境中驗證過的方案。2. 環(huán)境準備與基礎概念2.1 Hive表類型選擇內(nèi)部表還是外部表很多人一上來就建表導數(shù)據(jù)結果后面刪表的時候把原始CSV也連帶刪掉了哭都來不及。這里核心差別在于內(nèi)部表managed table的數(shù)據(jù)文件完全由Hive管理你DROP表的時候HDFS上的數(shù)據(jù)文件會一并刪除外部表external table則只是讓Hive“掛載”到某個HDFS目錄上DROP表只刪元數(shù)據(jù)原始文件還留在原處。我自己的習慣是凡是從CSV導入的數(shù)據(jù)一律建外部表。理由是CSV文件往往是業(yè)務方提供的原始資產(chǎn)可能還需要反復清洗、回溯一旦被內(nèi)部表連帶刪掉重新找業(yè)務方要文件的過程極其痛苦。建外部表只是多了一個關鍵字的事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而不是默認的LazySimpleSerDe這是很多教程沒講透的地方。Hive對TEXTFILE格式的默認SerDe是LazySimpleSerDe它對CSV的解析能力其實很弱。默認情況下它只認分隔符不認引號——也就是說如果CSV里某個字段值本身包含了逗號比如北京,朝陽區(qū)默認SerDe會把這個字段從逗號處劈開導致列錯位、數(shù)據(jù)錯亂。而OpenCSVSerde是專門為CSV設計的SerDe它原生支持引號包圍的字段、字段內(nèi)部的逗號、引號轉義等標準CSV規(guī)則。換句話說你拿到的CSV只要是符合RFC 4180規(guī)范或者Excel導出的常見格式OpenCSVSerde都能正確解析。實測對比過同一個文件用兩種SerDe加載的結果默認SerDe解析出來的錯誤率在包含逗號字段的場景下能達到30%以上而OpenCSVSerde基本能做到零錯位。不用糾結直接選OpenCSVSerde。2.3 表字段類型映射CSV沒有類型Hive有CSV文件本身是沒有類型概念的所有字段本質(zhì)上都是字符串。到了Hive里你要給它聲明Int、Double、Date這些類型這里就埋著導入失敗最常見的雷——某一行某個字段是一個空字符串而它對應的Hive字段類型是INTLOAD的時候會直接返回NULL。我的建議是導入階段先用全STRING類型的“裸表”把數(shù)據(jù)原樣加載進來做完清洗和校驗之后再通過INSERT SELECT的方式轉成正式的分析表該CAST的CAST該過濾的過濾。這樣做的好處是導入流程本身不會因為類型轉換報錯而中斷你始終能在原表里看到原始數(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. 核心細節(jié)解析與實操要點3.1 分隔符、引號符、轉義符的搭配規(guī)則CSV的解析核心在于三個字符的配合分隔符separator、引號符quote、轉義符escape。很多導入異常都源于這三個字符配置不一致。先看標準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)部的逗號當普通字符處理。而escapeChar的作用是處理字段內(nèi)部出現(xiàn)的引號本身比如某個字段值是他說你好CSV里會寫成他說\你好\解析器靠escapeChar識別出這里的引號是內(nèi)容而不是語法符號。實操心得如果你導出CSV是給Excel用的分隔符用逗號、引號符用雙引號、轉義符用反斜杠就是最穩(wěn)的組合。如果字段里既有逗號又有引號轉義符一定要配好否則導出再導入會出現(xiàn)列錯亂甚至數(shù)據(jù)丟失。3.2 跳過表頭行TBLPROPERTIES的妙用業(yè)務方給的CSV十有八九帶著表頭Hive默認不會自動跳過它會把表頭當成一條數(shù)據(jù)加載進去。你可以在建表的時候通過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ù)來源常見分隔符注意事項標準CSV逗號 ,注意字段內(nèi)逗號需要引號包裹Excel另存為CSV逗號 ,注意中文編碼建議UTF-8日志系統(tǒng)導出豎線 |檢查字段內(nèi)是否包含豎線本身MySQL導出制表符 \t注意\t在HQL里的轉義寫法金融報文分號 ;字段內(nèi)分號的處理要提前確認注意改分隔符之前先確認你的數(shù)據(jù)源在生成文件時是怎么轉義的。如果源端沒做任何轉義那你加載的時候無論怎么配都是會錯位的。4. 實操過程與核心環(huán)節(jié)實現(xiàn)4.1 導入路徑一LOAD DATA導入本地或HDFS文件這是Hive導入CSV最直接的方式。核心命令是LOAD DATA它分兩種來源LOCAL表示從本地磁盤上傳不帶LOCAL表示文件已經(jīng)在HDFS上。-- 從本地文件系統(tǒng)導入文件會被復制到Hive表的HDFS目錄 LOAD DATA LOCAL INPATH /home/user/data/user_info.csv INTO TABLE tmp_user_info_raw; -- 從HDFS目錄導入注意HDFS上的文件會被移動到表目錄原路徑不再有文件 LOAD DATA INPATH /input/user_info.csv INTO TABLE tmp_user_info_raw;這里有一個新手必踩的坑從HDFS導入時LOAD DATA不是復制而是移動mv。如果你的原始文件在HDFS的/input目錄下LOAD完之后原文件就沒了。如果不想動原始文件有兩個替代方案先把文件cp到另一個目錄再LOAD那個目錄不走LOAD直接把文件放到外部表指定的LOCATION目錄下因為外部表的LOCATION就等同于表的存儲目錄放進去之后立刻就能查詢到第二種方法我用得更多因為省掉了一次HDFS操作而且不依賴HiveServer2的執(zhí)行任務。4.2 導入路徑二INSERT OVERWRITE寫SELECT查詢結果有時候“導入”不是從文件直接加載而是需要從另一張表加工后寫入。這種情況用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í)行都會清空目標表目錄下的所有文件然后寫入新數(shù)據(jù)。如果只想追加用INSERT INTO。但注意Hive的表文件可能會因此變得很碎如果頻繁INSERT INTO建議定期做ALTER TABLE ... CONCATENATE只適用于ORC格式或者重建表做一次合并。4.3 導出路徑一INSERT OVERWRITE DIRECTORY導出結果到HDFS把Hive查詢結果寫出去最基礎的方式是INSERT OVERWRITE DIRECTORY /tmp/user_export ROW FORMAT DELIMITED FIELDS TERMINATED BY , SELECT * FROM dws_user_info;這樣導出的文件是純逗號分隔的文本文件沒有表頭。很多下游同學拿到后發(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這樣整個結果集的數(shù)據(jù)類型是統(tǒng)一的。4.4 導出路徑二用Hive CLI輸出重定向到本地文件如果你查詢的結果量不大幾千條到幾萬條可以直接用Hive CLI或Beeline執(zhí)行SQL把標準輸出重定向到本地文件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輸出格式它會把查詢結果顯示成帶引號的CSV對字段內(nèi)含逗號、換行符的場景處理得比csv格式更好。如果追求極致的標準化可以用tsv2輸出制表符分隔的結果。注意--silenttrue不加上這個參數(shù)的話Beeline會把一大堆Hive的運行日志、箭頭符號混進輸出文件里文件直接變臟。我自己第一次導出就踩了這個坑輸出文件前幾行全是INFO級別的日志還得用腳本清理非常麻煩。4.5 導出路徑三通過HDFS下載合并文件這個方法是生產(chǎn)環(huán)境最常用的。Hive跑完INSERT OVERWRITE DIRECTORY之后HDFS上往往會生成多個part文件數(shù)量取決于運行時的Reducer數(shù)量。如果需要給業(yè)務方一個單文件CSV需要把這些part文件合并。步驟是這樣的# 查看生成的文件 hdfs dfs -ls /tmp/user_export # 合并所有part文件到本地 hdfs dfs -getmerge /tmp/user_export /home/user/export/user_info_all.csv-getmerge是HDFS命令里非常好用的一個工具它會把目錄下的所有文件按順序拼接成一個本地文件。默認情況下它不做任何格式處理直接把內(nèi)容首尾相接。如果每個part文件末尾都有換行符合并后的文件行不會串。但如果你不確定可以在-getmerge后面加一個-nl參數(shù)讓它在每個文件之間自動追加換行hdfs dfs -getmerge -nl /tmp/user_export /home/user/export/user_info_all.csv這里有個經(jīng)驗點在寫導出SQL之前就可以提前控制Reducer數(shù)量。如果數(shù)據(jù)量不大通過SET mapred.reduce.tasks 1;強制只有一個Reducer生成的就是一個part文件連合并這一步都省了。但這個方法只適合幾GB以內(nèi)的數(shù)據(jù)量數(shù)據(jù)量大了單Reducer會成為性能瓶頸。5. 復雜場景與性能調(diào)優(yōu)5.1 大文件導入如何避免OOM和解析失敗曾經(jīng)接手過一個業(yè)務需求一份CSV文件接近20GB單行的字段長度最長超過2MB用戶畫像標簽串在一起導致。直接用LOAD DATA導入Hive任務跑十來分鐘后就開始報Java heap space或者OutOfMemory。排查下來問題出在兩點第一OpenCSVSerde在處理超長字段時會把整行數(shù)據(jù)讀入內(nèi)存進行解析如果單行數(shù)據(jù)太大Mapper所在的Container很容易OOM。解決思路是先看業(yè)務上能不能拆開這些超長字段如果不能就得在Container參數(shù)上加內(nèi)存SET mapreduce.map.memory.mb 4096; SET mapreduce.map.java.opts -Xmx3072m;第二CSV文件如果有壞行比如某一行少了一個逗號導致列數(shù)不匹配OpenCSVSerde默認是把缺失的列置為NULL不會報錯但如果某一行列數(shù)多出幾個則有可能觸發(fā)解析異常。我建議在導入前先用一個快速巡檢任務跑一遍文件統(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ù)肯定有問題先別急著導入。5.2 分區(qū)表怎么導入和導出CSV實際業(yè)務中我們很少把CSV直接導入非分區(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ū)導入LOAD DATA LOCAL INPATH /home/user/data/user_info_20240601.csv INTO TABLE dws_user_info PARTITION (dt2024-06-01);動態(tài)分區(qū)導入從不帶分區(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;導出場景反過來查某個分區(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 壓縮格式的選擇導出gzip還是純文本導出CSV時要不要順便壓縮取決于下游怎么用。如果是給數(shù)據(jù)倉庫或者分析平臺做后續(xù)處理gzip壓縮是很好的選擇——體積能縮小到原來的五分之一左右而且大多數(shù)系統(tǒng)支持直接讀取gzip格式的CSV。實現(xiàn)方式非常簡單在導出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給非技術的業(yè)務人員就別壓縮了。他們拿到一個.gz文件大概率不知道怎么打開反而增加溝通成本。給程序做自動化消費的才考慮壓縮。5.4 編碼問題的統(tǒng)一處理CSV最讓人頭痛的編碼坑在我做過的項目里出現(xiàn)頻率非常高。業(yè)務方從Excel導出的CSV默認是GBK或者GB2312編碼上傳到HDFS后Hive按UTF-8解析結果中文全部變成亂碼。處理方案有兩種第一種在導入前統(tǒng)一轉換編碼# 本地轉碼后再上傳 iconv -f GBK -t UTF-8 user_info_original.csv user_info_utf8.csv # 轉碼后的文件上傳HDFS hdfs dfs -put user_info_utf8.csv /input/第二種在導出時指定編碼給下游。Hive自身沒有編碼轉換函數(shù)但可以通過SELECT搭配普通字符串操作變通處理常見的做法是導出后在本地統(tǒng)一轉換。我的建議是源頭統(tǒng)一UTF-8。和業(yè)務方約定所有CSV文件必須提供UTF-8編碼版本。這個約定看起來簡單但在實操中能省掉一大半的亂碼麻煩。如果你控制不了源端那就在導入前例行執(zhí)行iconv轉碼步驟把它寫進定時調(diào)度里。6. 常見問題與排查技巧實錄6.1 表頭沒有被跳過第一條數(shù)據(jù)丟失現(xiàn)象建表時明明設置了skip.header.line.count1LOAD之后查詢發(fā)現(xiàn)第一行數(shù)據(jù)不見了。排查思路這個屬性是Hive讀取時候的控制參數(shù)它生效的前提是文件在表目錄下能被識別成數(shù)據(jù)文件。如果你用LOAD DATA加載的是整個CSV文件會發(fā)現(xiàn)表頭行被正確跳過但如果你先hdfs dfs -put把文件放進了外部表的LOCATION目錄然后建表時又加了skip.header.line.count1那么建表之前文件就已經(jīng)在那里了之后LOAD新文件時表頭跳過邏輯可能只作用于新增的文件而不是歷史文件。實操中我傾向于不用這個屬性而是在上傳之前用腳本統(tǒng)一去掉表頭。理由很簡單這個屬性在不同Hive版本上存在兼容差異而預處理去表頭是確定性最高的方案。6.2 字段內(nèi)含換行符導致行數(shù)變多CSV規(guī)范允許字段內(nèi)包含換行符比如一個備注字段里就有一個真正的換行這就導致Hive在按行讀取文件時誤以為出現(xiàn)了新紀錄。這種場景下OpenCSVSerde同樣能處理——RFC 4180規(guī)范要求含換行的字段必須用引號包住OpenCSVSerde解析時能識別出這是個字段內(nèi)的換行而不是行終結符。但要注意如果源端生成CSV時沒有用引號包住含換行的字段那任何解析器都沒法正確判斷數(shù)據(jù)必然被拆成兩行。而且Hive讀取文件是按行\(zhòng)n切分后再交給SerDe解析的這意味著如果字段內(nèi)有換行但沒有引號包裹必錯如果字段內(nèi)有換行且用引號包裹OpenCSVSerde可以正確還原換行實測過一個文件里包含大量多行地址字段的數(shù)據(jù)用OpenCSVSerde加載后文本字段內(nèi)的換行被還原成\n存儲字段整體是完整的查詢結果也能對上行數(shù)。前提條件就是源端CSV生成必須規(guī)范。6.3 導入后部分行顯示為NULL這個最常見的原因是CSV文件里本來就有空值。比如1001,張三,28,,2024-06-01city字段是空的導入后顯示NULL是正常的。但有一種情況很坑CSV里出現(xiàn)\N字符。在Hive中\(zhòng)N是文本文件中表達NULL的默認標記。如果你的CSV數(shù)據(jù)里恰好有字符串\N比如某個字段值是\N表示空導入后它會被自動識別成NULL而不是字符串\N。這是Hive的默認行為處理方法是建表時通過SERDEPROPERTIES修改WITH SERDEPROPERTIES ( serialization.null.format )設置成空字符串后只有空字段才是NULL\N會被當作普通字符串處理。6.4 導出文件亂碼問題導入時亂碼的原因在前面說過了。導出時亂碼的問題則往往出在文件后續(xù)流轉環(huán)節(jié)用INSERT OVERWRITE DIRECTORY導出的文件是UTF-8編碼的但用Excel打開的時候Excel會默認猜測編碼如果猜成GBK就會顯示亂碼。有一個不太優(yōu)雅但很實用的做法導出后帶一個BOM頭Byte Order Mark。實測帶BOM的UTF-8文件用Excel打開時編碼識別準確率幾乎100%。Hive本身不支持寫B(tài)OM所以通常在本地用命令處理# 給導出文件加上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不過這也會帶來新問題如果這個文件還要再導回HiveBOM頭會變成第一個字段值的一部分需要在導入時用TRIM或者正則處理掉。所以我只在面向業(yè)務人員的導出場景加上BOM面向系統(tǒng)對接的導出保持純UTF-8。6.5 常見問題排查速查表現(xiàn)象可能原因解決思路導入后中文亂碼源文件GBK編碼Hive按UTF-8解析上傳前用iconv轉UTF-8第一條正常數(shù)據(jù)丟失表頭未被過濾或過濾策略不對預處理去掉表頭重新LOAD列數(shù)錯位、字段串列字段內(nèi)含逗號但無引號包裹源端修復CSV或替換分隔符字段內(nèi)容被截斷字段內(nèi)含換行符且被解析成新行確認引號包裹或用OpenCSVSerdeLOAD后原文件消失從HDFS導入時文件被移動用外部表LOCATION方式或先復制導入后大量NULL類型轉換失敗或CSV空值先用全STRING裸表加載導出文件帶日志信息未加--silenttrue重跑并添加靜默參數(shù)導出文件有多個partReducer數(shù)量大于1用getmerge合并或設置reduce1帶表頭導出時UNION ALL類型不匹配第一個分支與后續(xù)分支字段類型不一致全部字段CAST成STRING7. 踩過的坑與實用經(jīng)驗總結我在做Hive數(shù)據(jù)導入導出項目時踩過不少坑有些坑的排查時間長達一整天。這里分享幾個最典型的經(jīng)驗。第一個經(jīng)驗從業(yè)務方接收CSV時先做數(shù)據(jù)質(zhì)檢再導入。一份20GB的CSV文件如果導入后又發(fā)現(xiàn)某個字段串列或者編碼有問題重新導入的時間成本非常高。我的習慣是先拿一個幾千行的采樣文件導入到臨時表跑幾個簡單的查詢行數(shù)、空值率、列數(shù)分布確認沒有問題后再全量導入。這個步驟只花幾分鐘但能避免幾小時的返工。第二個經(jīng)驗用外部表做中轉用內(nèi)部表做存儲。所有CSV原始數(shù)據(jù)都建外部表LOCATION指向固定的HDFS目錄。這樣做的好處是后續(xù)清洗出錯時原始數(shù)據(jù)還在DROP表也不會影響HDFS上的文件。清洗后的數(shù)據(jù)再用內(nèi)部表保存享受Hive的管理和生命周期功能。第三個經(jīng)驗導出CSV給業(yè)務方之前一定要跟對方確認打開方式。如果對方說“我用Excel打開”那么編碼用UTF-8帶BOM分隔符用逗號字段內(nèi)有逗號的情況必須加雙引號如果對方說“我用Python pandas讀”那么編碼用UTF-8不帶BOM加不加表頭取決于對方需求但字段內(nèi)最好不要有多余的轉義符否則pandas的read_csv參數(shù)配置會很繁瑣。上個項目里就遇到過這樣的事我導出的CSV字段里為了兼容Excel加了雙引號轉義結果下游Python腳本用默認參數(shù)讀取時引號也被讀進來了字段值變成了張三帶引號對方又花了大半天寫清洗邏輯。從那以后每次導出我都會問清楚下游消費方式再決定轉義策略。第四個經(jīng)驗CSV導入導出的調(diào)度任務一定要有監(jiān)控和告警。數(shù)據(jù)量大的時候LOAD DATA任務可能跑10分鐘以上如果中途失敗Hive不會自動清理半成品數(shù)據(jù)部分文件可能已經(jīng)被寫入。重跑之前先確保表目錄是干凈的或者用INSERT OVERWRITE而不是INSERT INTO否則可能舊新數(shù)據(jù)混在一起。8. 一個端到端的完整實戰(zhàn)案例為了把這些分散的點串起來我給出一個從我實際項目中抽象出來的完整流程。需求描述某公司的運營團隊每天會從業(yè)務系統(tǒng)導出當天的用戶行為CSV文件包含用戶ID、行為類型、行為時間、行為詳情等字段。文件格式為標準CSVUTF-8編碼第一行是表頭。需要每天自動導入Hive供數(shù)據(jù)分析團隊使用。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 # 上傳當天的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)容都符合預期繼續(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轉成TIMESTAMP過濾掉空user_id的臟數(shù)據(jù)。8.5 第五步導出當日分析結果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è)務團隊使用。9. 寫在最后的補充我實際做這些導入導出工作時越來越覺得CSV這種格式雖然簡單但正因為簡單反而容易在細節(jié)上翻車。SerDe選型、編碼統(tǒng)一、表頭處理、文件合并每個環(huán)節(jié)單獨拿出來都不難合在一起卻需要一套完整的流程去保證穩(wěn)定可靠。建議你在自己的項目里先建立一套標準化的CSV導入導出流程模板包括建表語句模板、質(zhì)檢SQL模板、導出腳本模板。這樣新需求來了只需要替換表名和字段名就能快速復用整套流程不用每次從零開始摸索。這套流程沉淀得越完善你在處理數(shù)據(jù)對接上的時間成本就越低。如果后續(xù)有需要還可以在這個基礎上擴展成通用的數(shù)據(jù)交換模塊支持其他分隔符格式、壓縮格式、甚至自動識別表頭字段名的功能。先把基礎的CSV鏈路打磨扎實后面所有擴展都會順很多。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
蜜桃传媒一区二区亚洲| 韩日精品福利视频一区不卡在线免| 国产日韩欧美亚洲精品95| 亚洲另类色图片| 欧美日韩午夜精品一区二区三区| 亚洲精品欧洲色| 天天看,天天做| 午夜AV污污污| 日韩天美| 在线人成亚洲视频免费观看| 亚洲在线a| 色综合中文字幕不卡| 亚洲中字幕日本一区二区三区| 一区二区日韩欧美久久| 日本精品中文字幕视频| 97欧美日韩精品| 欧美激情总合网| 久久直播国产| 插欧洲美女欧美精品| 亚洲成人在线高清| 国产精彩女在线观看视频| 日韩性色b| 国产成人免费观看在线视频| 精品久9| 超碰97资源大奶| 91粉芽高清在线一区二区| 91男人天堂网| 欧美论理片| 老熟女91av| 六月婷婷综合| 性感美女啊啊啊在线| 久久99操天天日| 九九av| 午夜男女爽爽大片免费观看| 色综合V| 试看日韩黄片| 国产欧美另类久久久精品课程| 97色欧州| 久久精品免费| 四虎AV无码| 偷拍欧美综合| 一道本东京热加勒比一区二区三区| 国产人伦a片信息免费片| 国产精品国产自产高清AV| 超碰色97| av爱爱爱| 中文字幕乱码人妻二区三区 | 美女91网| 欧美五十路熟| 亚洲网站一区二区在线| 免费日韩黄片| 色噜噜综合网| 免費人妻夜夜爽天天爽爽一区| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 校园春色综合色| 国产午夜福利视频在线| 久久成年精品| 深夜激情 | 人人妻天天做天天爽| 久久AV色| 亚洲一二三四区在线免费看视频| 久久久亚洲熟妇资源| 啊啊啊啊啊好舒服视频| 国内精品久久人妻性色av| 欧美1区二区三区公司| 久久亚州精品成人Av无| 亚洲精品色| 成人八戒网站| 亚洲AV成人无码一区二区三区在线观看 | 亚洲女人91| 好爽视频在线观看视频 | 99视频自拍| 男人的天堂啪啪| 亚洲图片 激情小说| 国产区在线| 久久原创中文| 素人伊尹大香蕉免费下载视频| 久久免费精品96| 亚洲情色图片区| 91麻豆天美国产| 国产精品夜夜夜| 一级片视频啪啪| 欧美日韩第一页| 色情亚洲日本成人| 婷婷色色五月天福利| 国产午夜福利专区综合| 久久亚洲av成人无码国产| 二对二中文字幕。| 久久人妻| 亚洲乱伦图片视频| 1024日韩| 欧洲精品久久| 国产精品视频自拍在线| 在线女人91| 亚洲一区中文字幕| 成人亚欧免费视频| 亚洲精品 大香蕉| 国产乱码精品久久久久久| 久久久久大香青草精品综合| 91超碰在线| 九九精品无码专区免费| 猛交交| 99久久9| 伊人网青青| 九九AV| 欧美一区二区三区成人性生活| 亚洲婷婷综合网| 亚洲精品视频在线| 二三四区精品| 成人无码在线超碰网| 天美av在线观看| 射综合网| 一牛影视成人片免费| 综合干干干av久久久综合网| 日本熟女不卡视频| 中文字幕AV片| 人人看黄色视频| 久久极品一区二区| 亚洲日韩美女丝袜美腿人妻视频| 日本久久网| 午夜亚洲| 91人人爽人人爽| 亚州国产成人精品女人久久| 中文字幕一区二区视频在线观看 | 亚洲中文日韩精品| 国产综合久久久鬼色| 久久婷婷苹果| www.天天干| 91中出视频| 91丝袜美女国产| 久久久极品| 秋霞视频一区二区| 伊人骚琪琪亚洲天堂网站| 婷色五月天| 色97欧美| 人妻久热在线| 亚洲av青草久久一区二区| 亚洲人成网www| 污色区网站| 国产60区。| 色在线亚洲视频www| 婷婷久久综合| 久草尤物| 九九热精品| 女同亚洲欧美一二三区久久电影| 免费一级性爱久久| 激情婷婷丁香网| 99久久99九九99九九九| 超碰91在线| 玖玖在线视频| 国产日韩精品人妻久久久久色欲网站| 拍拍拍拍大尺度黄色三级片拍拍拍拍拍照| 欧美自拍偷拍免费观看| 熟女熟妇一区二区三四区| 狠狠五月天| 国产精品午夜AV完会免费 | 超碰偷拍| 无码人妻一区二区一牛影视| 中文字幕中文字幕一区二区| 欧美劲爆第一页| 99国产天美| 日韩性爱免费视频在线网站| 国产精品扒开腿做爽爽爽视频| xxx亚洲午夜天堂| 午夜国产成人福利视频| 日韩熟女操逼| 99少妇| 国产亚洲在线观看| 免费精品人妻一区二区三| 欧美日韩不卡传媒| 欧美日韩大陆黑人少妇99| 国产美女口爆吞精视频| 91天天爽| 日本淫穴在线| 人妻天天爽夜夜爽精品2| av一区二区三区 中文| 99婷婷一区二区| 十八禁电影伊人网| 国产精品。| 校园春色之综合网| 91色婷婷综合久久中文字幕二区| 天天草夜夜草高潮片| 婷婷8月天青娱乐| 97视频620| 九九精品热| 国产精品蜜臀久久久久无码AV| 理论久久婷婷网8| 激情四射五月天| 九一屌逼| 又大又长又爽| 97超碰色屌| 极品色社| 午夜呻吟欧美| 久久9精品视频| 开心五月婷婷激情| 六十路日本| 熟女六十路| 亚洲毛片一级带毛片基地| 国产成人在线观看网址| 九久精品| 亚洲天天做日日做天天谢日日| 天堂性色| 国产精品视频在线观看| 九九九久久久W精品| 蜜臀无码一区二区| 俞拍自拍| 久久精品导航| 偷偷人人精品女女久久| 91在线观看,天天综合| 熟妇无码视频三区| 亚洲一区中文字幕| 中文字幕三四区| 激情一区二区| 91中出| 中文AV制服乱伦| 人妻一区二区三区视频| 波多野42部无码喷潮在线观看| 日本三级A片网站com| 婷婷超| 中文字幕精品探花视频| 国产成人一级av88| 女人双腿搬开让男人桶| 眼镜人妻101.com| 久久欲| 在线免费观看日韩一区| 熟女色综合久久| 欧美中文字幕日韩在线| 亚洲国产高清福利视频| 青草av在线| 二色av| 婷婷成人久久久精品| 中文伊人大香蕉视频| 国产白领连续中出在线观看| 亚洲视频小说| av影院十区| 色吧91| 中文字幕五月婷婷免费| 亚州AV无码国产精品| 婷婷六月色开| 中文久久一区| 日韩专区久久久| 黄色片G G G| 少好三P| 九九九九九九九九九国产精品| 人人妻人人爱人人玩| 欧美黄色手机在线观看| 亚洲国产成人精品无码专区| 超碰久久中文| 91男人天堂网| 性久久久| 99热9| 欧洲乱码视频| 清纯唯美综合| 99国产在线绯色一区| 黄色成品网站| 久久青娱乐| 久久人妻熟女一区二区| 欧美18 在线观看| 国产中文精品一区二区在线观看| 九九热超碰| 亚洲天堂第一页| 欧美亚州综合网图片| av爱爱爱| 亚洲成人网站在线观看| 亚洲丝袜制服国产91_国语字幕免费观看完整版下载第5集_ | 亚洲综合一| 啊啊啊啊啊啊在线| 美日韩成人| 粉嫩AV一区夜夜嗨| 亚洲欧美日韩中文播放| 日本123区操B视频| 夜夜夜夜爽| 伊人操你| 欧美日韩222| 欧美色爱综合| 亞洲久久直播| 骚鸭AV| 国产狂喷潮在线精品| 99热婷婷| 亚洲AV不卡在线观看| 日韩中文字幕国产| 大香蕉99热| 麻豆久久精品亚洲精品88| 色综合色欲色综合色综合色综合| 97se综合| 黑人操一区二区| 亚洲吊色| 99在线免费公开视频| 亚洲国产美女久久久久 | 97久久久久久久久久| 日日操免费视频| 亚洲欧美天堂在线| A级片日韩欧美国产欧美视频精选观看 | 91夜夜蜜桃臀1区2区3区| 91中文字幕制服丝袜免费视频| 国产小黄片在线免费观看| 一区,二区,三区视频| 精品无码一区二区三区色欲| 日本美女性生活久久久久久久 | 超碰在线人妻| 免费试看60秒| 天天干一区二区| 美女裸体无遮挡永久免费观看网站| 日本大片日本一区二区免费高清| 欧美亚洲首页| 一区二区三区精品黑丝白丝酒店对鸡 | 四虎在线免费视频| 亚洲操逼视频网站| 欧美日韩久久精品爱爱| 无码免费一区二区三区啪啪| 97视频网站| 中文字幕制服欧美久久一区| 人妻一区二区三区视频| 亚洲和欧美裸体美女双飞视频| 高清无码在线播放网站| 日韩在线观看AV| www色婷婷| 黄页av| 嗯啊啊啊轻点视频 | 熟妇熟女亚洲天堂网| 亚洲在线a| 色噜噜人妻丝袜AV资源| 日韩精品永久在线观看| 91色香| 青草香蕉网| 日韩人成网站在线播放| 欧美综合1性辶| 日日夜夜骚| 欧美性爱中文字幕无线码| 色哟哟精品1精品2| 久操B网| 性在久久久久久| 九九热re99re6在线精品| 97超碰69| 911粉嫩人妻| 2019天天干| 久久视频,这里只有精品 | 亚洲女人毛茸茸91| 综合日本女人伊人| 国产乱伦性爱AV| 日韩成人私密一级精品av| 欧美激色| 观看视频图片一区二区三区| 色人久久| 日韩精品人妻一| 成人久久久| 啊嗯嗯啊好大好爽| 伊人青青草久久| 日韩一区二区精品视频| 97人人模人人爽人人| 国产日韩精品suv| 9ⅰ久久久天天| 日本99一区二区| 久久人妻丝袜一区二区三| 郑州宾馆老熟女露脸啪啪| av中亚| 中文字幕欧美精品亚洲日韩蜜臀| 男人久久精品| 亚洲熟妇丝袜在线观看| 婷婷五月影院| 丁香五月成人| 妺妺跟我一起洗澡没忍住| 亚洲国产欧美一区二区潘金莲| 这里只有精品97| 久久久久921| 91网站视频在线观看| 五月天黄色av| 江都AV在线| 99精品久久| 黄片直播三级黄片两女一男| 欧美性爱十八禁| 天天干天天燥| 一本大道不卡一二三区| 一级AV性爱| 亚洲麻豆av一区二区| 日本女人久久久| 亚洲交性| 老女人综合| 欧美人妖内射| 国产日本一区二区三区蜜臀在线观看| 2017天天操天天日| 加勒比aⅴ| 干B网| 麻豆一区二区AV天美| 久久精品六区| 殴美色网| 亚洲欧洲激情卡通另类文学四射小说网站| 久久啊啊啊| 久久久久国产精品久久久| 神马麻豆福利院| 另类小说欧美激情校园春色| 色香综合| 国产综合色精品在线观看| 亚洲九九九| 欧美一级在线观看成人| 大黄片做爱的大的| 久久久精品成人国产| 18禁超污无遮挡无码免费网| 伊人激情| 超碰97资源中文字幕| 自拍欧美| 91超碰丝袜制服| 奶水 人妻 哺乳 在线| 青青青在线高清视频在线一二三四区| 日本精品一区二区不卡| 97碰| 国产精品久久久久无码A√| 岛国AB视频| 动漫爆乳3D奶水一区在线观看| 天天草天天干天天日| 人妻人人操| 国产农村妇女一区二区| 97 九色| 美女91网址| 丰满人妻一区二区三区蜜桃视频| 性饥渴少妇av无码毛片| 久久综合99| 青青草国产亚洲精品久久| 校园春色宗合网| 97ai亚洲| 国产精品嫩草影院免费| 精品91摸| 欧美久久人体| 久久久久久久久久久免费精品| aaaa黄片| 欧美中字二区| 精品亚洲| 亚洲啪啪性视频| 性色高清在线| 国产综合久久久麻桃个| 一类无码操逼视频| 美女尤物福利视频| yazhouzaixian| 99人妻碰碰碰久久久久禁片| 91九色在线| 日本久久综合| 97干在线| 六十路日本| 欧亚日韩三区| 另类图片综合| 五月天开心网| 超碰97人人乐| 精品人妻一区二区视频| 九一屌逼| 色牛aV| 五月丁香久久| 人人爽夜夜玩视频| 亚洲国产奇米影视久久| 欧美人妻色| 欧美人妻少妇| 大奶啊啊好爽| 上床啊啊啊| 在线观看日韩av不卡| 国产91精品久久久久久久网曝门| 国产精品香蕉| 久久精品国产精品亚洲艾通辽熟妇| 啊啊啊啊啊啊啊网址在线观看| 无遮挡男女激烈动态图| 久久欧美按摩999| 日韩精品三级| 屌色在线97视频| 中文字幕一区二区无码成人| 极品色www影院| 超碰午夜| 一区二区三区激情在线观看| 97久操| 色色色色电影网| 青草伊人久久| 中文字幕 国产区| 日韩在线观看AV| 欧美视频在线视频免费va| 亚洲综合色在线| 欧美日韩国产高清在线一二三区 | 超碰天天操你比| 日本性爱欧美性爱| 欧美在线 亚洲| 欧美aaaaaaa| 欧美在线中M| 国产精品宅男免费| 日韩AV噜噜噜一区二区三区四区| 9久精品| 欧美综合色图网| 婷婷五月天小说| 97在线免费观看视频| 东北夫妻性偷拍| 欧美高清18A片| 色偷偷色偷偷欧美日韩| 日本操逼视频导航| 青青草色AV| 97亚洲国产影视| 亚洲国产一区二区日韩专区| 欧美极品色| 人妻av在线| 中文久久| 中文字幕一区二区三四五区日日骚| 3P乱轮视频| 超碰精品97| 大香蕉 222| 做爱A级亚欧| 天堂av最新电影网| 久久精品亚洲婷婷| 亚洲精品毛片在线观看| www.人人摸在线视频| 96久久科窝| 眼镜人妻101.com| 国产久9| 国产精品乱码久久久久久久久久久久| 欧美日本国产日韩激情视频| 超碰99re| 91精品久久久久久久久久| 色色综合网站| 国产精品区在线12p| 九九九国产精品| 蜜臀在线免费观看在线免费观看| 91c色| 蜜臀99久久精品久久久懂爱| 欧美综合 站| 蜜色网色哟哟| 久久婷婷影院| av天堂天堂av日韩| 在线视频 亚洲精品| 熟女久久久| 欧亚不卡| 奸色色 男人天堂 天天射| 亚洲成a人片在线观看中文!!!| 欧洲综合色图| 中文字幕精品三级久久久| 97色插| 亚洲天堂 视频你懂的| 免费的黄片有限公司| 久久东京热成人| 亚洲精品1区| 97操97色| 九色97| 中文字幕一区日韩精| 日韩极品无码B| 91丝袜视频在线观看| 亚洲图片欧美另类综合免费视频大大香| 精品一区二区三区最新| 国产农村妇女一区二区| 久久性视频| 女同性恋久久| 99性爱在线观看| 亚洲一区二区三区播放在线| 老熟女乱伦一区| 91夜色| 五十路熟女人妻一区二区三区四区五| 婷婷探花久久精品一区| 智利AV在线网| 精品人妻视频一区二区在线播放| 欧美97日韩精品| 少妇69中文| 97久久精品亚洲中六字幕| 日本人体九九九九九九| 亚洲色图超碰在线| 夜夜爽爽爽| 男人的天堂亚洲| 麻豆60秒| 中文字幕一二三区| 99操| 一区二区视频你懂的| 欧美韩国你懂得在线| 97干天天| 97欧美色综合| 欧美亚州综合网图片| 色狠狠一区二区三区香蕉| 久久久性爱| 九月伊人中文字幕| 2020久久免费视频| 国产精品一区二区亚洲人成毛片 | 欧美 亚洲 另类 综合| 亚洲网污污污污| 美女爽爽爽刺痛洞洞| 高清孕妇孕交 交孕妇| 99久久免费看精品国产一区| 91亚洲欧美激情| 欧美亚洲情色| 高清国产成人无码| 亚洲精品成人激情在线| 国产成人亚洲精品自产在线 | 久久久久久久强迫| 波多野结衣先锋影音| 午夜理论片在线观看免费| 亚洲欧洲综合视频在线| 亚洲AV无码天美传媒一区| 国产性刺激| 亚洲熟女乱色一区二区三区久久久 | 欧美色图97| 国产97视频| 最新av网站在线观看| 久久久无码av精| 能看的AV| 天天日天天操VV| 国产9熟妇视频网站| 韩国一级做a久久久久| 日本无码1| 欧美国产日韩清纯唯美| 日韩av色图综合| 中文字幕国产| 日本性感人妻91| 岛国黄色大片网站| 亚洲AV资源| 黄页网站成人免费| 免费观看性欧美一级| 免费A V在线| 大香蕉国产中文自拍| 老司机福利社视频在线观看| 香港澳门日本三级网站| aaa一级黄片| 五月天久久婷婷亚洲 | 岛国在线免费视频| 天天操综合网| 久久精品中文字幕女同| 波多野42部激情无码喷潮| 国内自拍 日韩激情 99| 韩国三级三级BD在线| 怡红院成人视频| 色乱二区| 亚洲欧美setu| 很很操在线| 婷婷五月天小说| 亚洲综人| 狠狠色噜噜狠狠狠狠狠色综合久久 | 久久久人体| 欧美久久人体| 操逼逼福利视频| 欧美在线大香蕉| 国产高清亚洲日韩一区| 男人的天堂不卡一区二区| 国产女主播视频在线观看| 久久久国产av美女私房| 精品久久久中文字幕不| 99热在线播放| 亚洲男人天堂2019| 91欧美网| 920日本午夜免费| 国产美女高潮视频| 第一高清av中文字幕| 久久综合久色欧美综合狠狠 | 一区二区免费电影久久| 精品免费1| 蜜臀久久99精品久久久久久无删减 | 1769一区| 夜夜爽妓女| V A在线| 啊啊啊啊啊啊啊国| 日语五十路和六十路亚洲国产精品| 久久久98网站免费视频| 欧美性性性| 99色视频| 羞涩视频| 男人的天堂激情| 天天干天天舔| 99re这里| 日韩乱伦视频| 色97欧美| 人人爽天天爽| 蜜臀无码视频在线观看| 久久亚洲天天做| se吧提供国产乱老熟视频胖女人| 日本免费不卡二区| 亚洲黄片免费在线播放| 夜夜狠狠躁日日躁色视频| 欧美性爱免费短视频| 欧美亚洲高清不卡| 精品v日韩欧美国产| 极品出轨视频网站| 人妻天天夜夜爽一区二区| 日本久久女同性恋视频| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 狠狠色婷婷777| 97在线视频网站| 欧美成不卡网| 日韩探花精品在线视频| 凌辱美少妇久久aV| 日本一区99| 国产家庭乱伦网址| 啊v在线观看视频| 欧美精品第四五页中文字幕在线观看| 亚洲小电影免费涩涩成人在线高清 | 久久人妻熟女一区二区| 97se综合网| 亚洲成A∨人影院在线欢看| 日韩欧美传媒一区国产| 欧美激情片一区二区| 亚洲操逼视频网站| 12一15性XXXX粉嫩国产| 麻豆人妻偷人精品无码视频| 色五91| 日韩一性一交一A片俄罗斯 | 亚洲一区二区麻豆影院| 无码人妻精品一区二区中文| 91精品久久久久久| 内射黑人| 精品人妻伦一二三区久久| 日本精品中文字幕视频| www.人人摸在线视频| 久久综合精品一区二区三区| 日本 欧美 国产一区| 大香交伊人网| 午夜一区二区三区国产| 亚州综合色| 国产精品乱码久久久久久| 人人妻人人操人人乐| 色一色综合网| 日韩黄色片子| 亚洲超碰97| 欧美97av| x97av| 人妻精品综合中文字幕在线| 一区二区娱乐网站| 国产不卡免费在线视频| 午夜福利一区二区影院| 麻豆精品.欧美精品.日韩精品.| 亚洲区限制级| 欧美熟女激情| 91 手机在线播放 绯色| 深夜激情| 欧美亚洲国产91在线| 日韩精品9999| 欧美日本国产日韩激情视频| 好湿好紧视频| 国产噜噜噜噜噜久久久久久久久| 国产极品美女高潮无套在线观看| 久久春色| 久久风骚城市| 亚洲精品国产AV天美传媒| 色婷婷狠狠18禁| 欧美性生活免费网| av网站免费看| www.91视频网| 操老熟女AV| 国产25页| 欧美久久久15P| 99免费视频| 在线观看日韩av不卡| 黄色av网站在线播放| 婷婷色综合欧美日韩| 日韩一级二级三级| 秘书高跟黑色丝袜国产91在线| 极品久久久久久久久久久久久久| 久久久久骚| 91N欧美| 综合激情五月丁香| 亚洲欧美国产日本一区二区三区| 亚洲国产精品无码AV在线| 夜夜操美女| 人人操人人色人人摸| 亚洲影院365| 亚洲阿v天堂在线| 超碰免费人人| 国产女生在线| 妺妺跟我一起洗澡没忍住| 黄色大香焦1级‘′‘| 在线一道啪| 日本www操操操| 手机看片1025| 五月丁香久久| 青青11操操操操操操操操| 六月丁香五月婷婷| 淮穴色AV| 国产乱弄免费在线视频。 | ′ !γ}丶。。久久精品欧美一区二区三区 | 日韩精品三区四区| 色盈盈影院| 亚精品无码毛片一区二区三区| 91精品又粗又猛又爽| 东京热AV男人的天堂| 97Ai亚洲| 国产精品蜜臀久久久久无码AV| 九久9精品| 欧美18 在线观看| 青娱乐国产精品| 九九色逼| 亚洲综合影片| 亚洲欧美变态| 可免费观看的av毛片中日美韩| 搡老熟女免费视频| 国产区性爱在线视频秋霞豆 | 综合欧美亚洲| 国产欧美精选激情视频| 色婷婷色99国产综合精品| 不卡超碰护士AV在线免费播放| 新97国产超碰| 亚洲高清欧美总合| 久久精品国产亚洲AV高清演员表| 国产成人精品日本视频| 极品丝袜无码| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 成人 日韩欧美一区| 艳尻美人妻| 人妻天堂网| 国产强上视频在线观看| 国产精品一区二区在钱播放| 99re在线视频| 男女性无套 免费九一| 精品v日韩欧美国产| 91久久久久久久久久久| 校园春色家庭伦理欧美激情| 一区在线精品中文字幕| 你懂得91| 久久精品中文| 国产av激情无码久久天堂| 热九九精品| 校园春色亚洲无码| 欧亚无码视频| 嗯嗯嗯好爽| 欧美综合色综合| 宅男影院久久久,99| 色五91| 欧成人在线| 加勒比在线视频一区二区三区 | 国产二区三区免费视频| 日韩三级视频一区二区三区| 国产强奸91| 在现视频女上位好爽| 91四海无码日韩欧美| 久久久久久久久成人av解说| 色噜噜人妻丝袜AV资源| 久久夜夜| 亚洲熟妇自偷自拍另欧美| 亚洲区小说| 欧美成人性爱视频免费观看| 丰满精品人妻少妇久久字幕| 大学生美女口爆| 天天添天天干电影| 青草地一本线一区二区三区| 日本在线激情一区二区三区| 九九九九一级| 95自拍视频在线观看| 天堂麻豆天美| 欧美日韩午夜精品一区二区三区| 99精品丰满人妻无| 国产成人欧美精品在线| 九九热免费国产视频婷婷伊人五月 | 婷婷去俺也去六月色| 欧洲乱码视频| 国产在线激情视频| 欧美青青视频| 亚洲三区视频| 岛国999| 日韩乱插| 外国免费性情大片| 日韩另类色图| 中文操逼字幕| 日夜久久久九九九久| 免费一级性爱久久| 六月婷婷一区二区三区| 久久av成人无码免费| 国产一| 婷婷久久五月| 无码人妻一区二区三区免费九色| 久久日韩毛| 国产黄色视频久久| 大香蕉欧美国产日韩高潮| 无码日韩人妻av一| 9久9久| 中文字幕啊啊啊在线观看视频| 国内伊人久久久久久网站视频| 国产高清1234区| 黄色片一区二区三区四区五区| 做爱福利视频一区二区| 手机在线观看不卡无码av| 国产麻豆91欧美一区二区久久婷婷国产精品| www.超碰在线| 亚洲国产美女久久久久| 殴洲老熟女| 色香色欲天天综合网天天来吧| 伊色久人大在线| 爱干爱射网啊啊啊| 日本免费专区| 在线二区不卡| 天天做天天爱天天爽AV| 欧美亚洲日本视频久久久| 亚洲97网站| 久妇网| 丁香五月综合| 一区二区中文| 日日骚精品视频| 色综合99| 国产一区在线观看无码AV| 欧美线天码中字| 国产精品青青草| 黄色网址在线免费观看| 亚洲欧美另类图片| 欧美日韩亚洲电影| 99国内精品| 91动漫操逼视频| 欧差乱伦二三| 夜夜嗨一区二区三区三州加勒比| 99热超碰| 97人人模人人爽人人| 欧美高清无码免费视频高清版| 精彩久久中文| 熟妇人妻一区二区| 制服乱伦| 亚洲AV性爱电影| 探花精品 一区二区| 亚洲se电影| 亚州色图狠狠干| 99色在线| 亚洲欧美日韩精品久| 91人妻人人澡人人爽人人精品| 91n.欧美| 青青欧洲黑| 岛国AV一区二区电影| 五月丁香大香蕉| 亚洲色图日韩精品| 人妻无一区二区三区| 欧亚日韩中文在线| 骚鸭AV| 99精品久久久久久| 欧美一二三区四五区| 3571色综合一区二区二区| 亚洲制服欧美另类内射| 亚洲国产精品9999在线观看| 久久久96| 啊啊啊免费视频| 亚洲情色 自拍| 9999久久久久| www.男人天堂| 日日夜夜草草草| 久久伊人网视频一区二区三区| 久久怡红院| 亚洲操逼网| 高清无码国产亚洲| 爽 好舒服 无码刺激久久| 欧美日韩一区二区三区四区蜜桃| 亚洲AV成人无码一二三久久| 成人性爱免费播放| TS人妖另类精品视频系列| 69一区二区| 女生91网站| 亚州男人天堂| 欧美日韩中文字幕人妻| 干B网| 超碰美国| 天天综合97| 欧美91精品国产自产| 翔田千里AV无码秘 三区| 亚洲丝袜诱惑| 日本一级真人黄色性爱视频| 97精品视频| 97超碰站| 免费国产电影一区二区| 91亚洲色人| 无码逼| 女人双腿搬开让男人桶| 中文久久爆乳| 五月丁香久久| 大鸡吧尹人在线| 久久超碰亚洲人| 亚洲大色堂| 欧美在线色| 无码人妻毛片丰满熟妇精品区| 亚洲素人综合| 最新制服中文第一页| 91成人18| 日韩熟女乱伦中出| 亚洲女毛多水多21P| 日本中文字幕在线电影| 亚洲有码 欧美精品| 天天操女人| 欧天美中出| 欧美淫乱视频| 91中文字幕| 第四色奇米影视777| 国产不卡免费在线视频| 大香蕉av在线| 日本 免费 一区二区三区 久久香蕉 | 97超碰国产亚洲精品| 亚洲欧美伦综合| 一区二区精品日韩欧美在线观看| 在线国产福利网址导航| 九九99精品| 亚洲综合有玛| 天天综合站| 日韩无码人妻| 国产精品久久久久久久黄无码| 久久婷婷精品| 啊啊啊啊啊在线视频| 天美传媒精品一区二区三区| 精品视频一二三中文| 思思热久久成人| 无码99| 青青草字幕AV| 天天噜| 8050午夜少妇无码| 大香蕉在线视频15| 欧洲自拍第一页| 日韩有码 一区二区三区| 久久精品亚洲成a人天堂| AV一二区| 情色大香蕉| 波多野结衣一级视频| 嗯嗯嗯好爽| 大香蕉92| 自拍偷拍国产欧美日韩韩| 丁香婷婷啪啪| 蘋果手機免費看成人Av| 久久超碰网| 97人人模人人爽人人| 欧美另类自拍 | 久久久96| 天天色播| 精品无码产区一区二| 91在线精品一区二区三区| 狠狠色婷婷7777久| 超碰97在线色男人??| PMv在线观看| 人人天天欧洲| 久久亚洲日韩熟女精品| 亚洲高清无码在线桃色| 美女91在线观看| 五月丁香激情四射| 婷婷色网| 性生活性生大爱77AV国产| 国产精品亚洲四五区在线观看| 91操熟女视频| 亚洲欧美一区二区三区一猛片| 美女的肌被草喷水视频| 国产成人久久精品蜜臀| 五月丁香影院| 夜夜久久久| av资源在线播放天堂| 欧美玖玖爱免费玖玖| 啪啪视频亚洲第一| 欧美情色男人的天堂| 成人蜜乳小视频网站| 97国产色综合| 精品无码久久久久久久久果冻糖心| 亚洲五月婷婷| 性感美女91影视| 丁香色五月 97干| 骚妻少妇精品性色无码四色A V| 少妇xx精品| 久草精品一区| 国产浮力影院第1页| 国外91| 丁香六月东京热| 玖色av| 人妻久久久| 99999精品| 日韩精品高清资源在线| 国产精品久久久吖| 青青草精玖玖69精品| 最新亚洲人成网站在线影院| 久久鲁夜| 嫩草影院在线观看精品 | 肉动漫无遮挡h在线观看| 人人澡人人爽人人精品| 国产精品一区二区手机看片| 天天看人人操屄犊摸阴| 国产高清精品一区二区三区毛片| 中国黑人三级片网站上区| 国产中文精品一区二区在线观看| 青青草日韩免费观看高清在线| 18禁超污无遮挡无码免费网| 蜜区区视频79| 亚州色图第三区| 三级精品三级在线观看| 日韩 成人 有码| 在线观看综合精品亚洲| 天啪| 97色诱| 精品v日韩欧美国产| 香港久久久| 天天干2019| 国产精品一区二区校花| 亚洲 中文 欧美 日韩 在线| 色色操| 欧美gv在线观看| 色情婷婷久久五月天| 色九月婷婷| 日韩欧美操逼xxx| 夜夜夜夜爽| 久久熟女人| 五十路三级片| 日韩有码专区| 一区二区三区四区久久视1| 国产一级黄色片在线观看| 久久久人妻| 麻豆精品三区视频| 久操大香蕉手机视频在线看| 国产91亚洲精品一区二区三区| 九九九九精品一区| 偷拍 精品另类 凸凹了四区| 国产隔壁老王影院在线| 男人天堂最新手机版在线青青草| 亚洲性综合9| 亚洲导航深夜福利| 免费视频97| 9 9无尺码天堂网| 97精品国产97久久久久久免费| 国产亚洲中文不卡二区| 91天堂网| 九久久精品| 色女综合| 亚洲激情综合| h无码动漫在线观看| 日本一级真人黄色性爱视频| 亚洲人人夜夜澡人人爽| 一个人在线看的黄色电影网站| 黄片www.| 强奸乱伦AV网站| 久久婷婷电影网| 久久久久国色αv免费观看| 大肉棒导航| 九九热免费国产视频婷婷伊人五月 | 91在线丝袜视频| 美国美女AV在线| 乱老女人一区二区视频| 亚一综合久久久久久久久久| 密乳视频在线| 久久丝袜| 神马久久免费电影观看| 亚洲无限观看| caopeng97人妻| 91美女在线精品视频| 丁香五月天社区| 美女自卫慰黄网站免费| 色色福利| 久操网址| 中文字幕一二区二三区人妻专区| 俄罗斯及免费在线看| 蜜臀久久99精品久久久久久成人小说 | 日本高清_区二区三区| 青娱乐老司机视频| 色综合av综合久久| 国产一区在线播放| 国产熟女无套内射| 我要色综合网站| 丝袜加勒比| 男人的天堂三级| 超碰 国产熟女精品一区| 热热色色综合| 激情婷婷丁香| 亚洲一区制服诱惑| 98福利在线视频| 久操影视| 色偷偷男人的天堂麻豆| 91精品久久久久久77777| 色超碰综合| 久久大精品乱码视频人妻熟女| 日日夜夜草草草| 天天内射| 乱久久久| 天天影视网色欲色香| 成人一级二级| 亚州高清AV| 人妻91少妇| 中文字幕后石码四区五区| 91天天综合| 欧美成熟性爱精品| 午夜福利无毒不卡| 亚洲一区二区三区中文字幕| AA特级绝黄| 久久xxxx| 96久久科窝| 精品国产一区二区三区久久久蜜臀 |