- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有很多这种格式的文件日志:
[Windows user ] Pâmela
[Host name ] DV6000
[Local time ] 14:25:07
[System time ] 17:25:07
[ASCWebBrowser info] 1.1.1
[Last Write Time ] 07/19/2016 14:01
[HD Info ] Volume name: , Serial: 1713925408, File System: NTFS, Max Component Length: 255
[Network Info
[Index ] 48
[Type ] 1
[Description ] TAP-Win32 Adapter OAS #6
[Name ] {343D77F2-B3CE-414B-AE01-E248D3FC85F6}
[Ip address ] 169.254.92.162
[MAC Address ] 00-FF-34-3D-77-F2
[Gateway ] 0.0.0.0
[Mask ] 255.255.0.0
[Index ] 38
[Type ] 1
[Description ] TAP-Windows Adapter V9 #6
[Name ] {C81FC3F7-19F9-44DD-9470-4982F48A141D}
[Ip address ] 169.254.96.118
[MAC Address ] 00-FF-C8-1F-C3-F7
[Gateway ] 0.0.0.0
[Mask ] 255.255.0.0
[Index ] 36
[Type ] 1
[Description ] TAP-Win32 Adapter OAS #5
[Name ] {72115AC7-4EE2-4CB3-A8D2-
]
我需要将每一行转换成一列。如您所见,有 1 个或多个网络信息。那将是一张子表,其余的都是父表。我已经通过 Hive 阅读了这个日志,但我现在仍然停留在如何旋转/转置它上。
到目前为止,我已经尝试了以下方法:
DataFrame
枢轴。没办法,因为需要聚合。DataFrame
枢轴。它提示索引重复。相同的信息可以出现在不同的日志中,因此唯一唯一的是文件名。 加入。尝试使用文件名作为连接列进行自连接,但它会生成笛卡尔结果。 RowNumber
是由 dense_rank) 在 fname
上生成的列。问题是对于每个 IP,它都连接到每个描述,而不仅仅是相同的描述。因此,对于 2 个 IP,它为每个掩码创建 4 行,8 行,依此类推。
select coalesce(hn.value, "No_Name") as hostname, d.value as decription,
g.value as gateway,i.value as "index", p.value as IP, mc.value as MAC,
m.value as Mask, n.value as "Name", t.value as "Type"
from net_asclogs_p hn left join net_asclogs_p d on hn.fname=d.fname and d.rownumber= 1
left join net_asclogs_p g on hn.fname=g.fname and g.rownumber=2
left join net_asclogs_p i on hn.fname=i.fname and i.rownumber=4
left join net_asclogs_p p on hn.fname=p.fname and p.rownumber=5
left join net_asclogs_p mc on hn.fname=mc.fname and mc.rownumber=6
left join net_asclogs_p m on hn.fname=m.fname and m.rownumber=7
left join net_asclogs_p n on hn.fname=n.fname and n.rownumber=8
left join net_asclogs_p t on hn.fname=t.fname and t.rownumber=9
where hn.rownumber=3;
尝试了 Brickhouse 的 Collect,但它只带来了最后一条记录,而不是全部。
尝试了 RegexSerde,但我确定我在这里没有得到任何东西,因为所有字段都是空的:
CREATE EXTERNAL TABLE IF NOT EXISTS asclogs1 (host string, index string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES
( "input.regex" = "Host name\\s{2,}\\]\\s(\\w+)|Index\\s{2,}\\]\\s(\\w+).*",
"output.format.string" = "%1$s %2$s" )
STORED AS TEXTFILE LOCATION 'hdfs:///asclogs/'
好吧,我没主意了。最后的办法是用 Java 编写自定义类。有其他选择吗?
最佳答案
create external table log (key string,val string)
row format serde 'org.apache.hadoop.hive.serde2.RegexSerDe'
with serdeproperties ("input.regex" = "\\s*\\[(.*?)\\s*(?:\\]|$)\\s*(.*)")
;
select * from log
;
+--------------------+---------------------------------------------------------------------------------+
| key | val |
+--------------------+---------------------------------------------------------------------------------+
| Windows user | Pâmela |
| Host name | DV6000 |
| Local time | 14:25:07 |
| System time | 17:25:07 |
| ASCWebBrowser info | 1.1.1 |
| Last Write Time | 07/19/2016 14:01 |
| HD Info | Volume name: , Serial: 1713925408, File System: NTFS, Max Component Length: 255 |
| Network Info | |
| Index | 48 |
| Type | 1 |
| Description | TAP-Win32 Adapter OAS #6 |
| Name | {343D77F2-B3CE-414B-AE01-E248D3FC85F6} |
| Ip address | 169.254.92.162 |
| MAC Address | 00-FF-34-3D-77-F2 |
| Gateway | 0.0.0.0 |
| Mask | 255.255.0.0 |
| (null) | (null) |
| Index | 38 |
| Type | 1 |
| Description | TAP-Windows Adapter V9 #6 |
| Name | {C81FC3F7-19F9-44DD-9470-4982F48A141D} |
| Ip address | 169.254.96.118 |
| MAC Address | 00-FF-C8-1F-C3-F7 |
| Gateway | 0.0.0.0 |
| Mask | 255.255.0.0 |
| (null) | (null) |
| Index | 36 |
| Type | 1 |
| Description | TAP-Win32 Adapter OAS #5 |
| Name | {72115AC7-4EE2-4CB3-A8D2- |
| (null) | (null) |
+--------------------+---------------------------------------------------------------------------------+
select max (Windows_user) as Windows_user
,max (Host_name) as Host_name
,max (Local_time) as Local_time
,max (System_time) as System_time
,max (ASCWebBrowser_info) as ASCWebBrowser_info
,max (Last_Write_Time) as Last_Write_Time
,max (HD_Info) as HD_Info
,collect_list
(
case when nwi_seq > 0 then
named_struct
(
'Index' ,Index
,'Type' ,Type
,'Description' ,Description
,'Name' ,Name
,'Ip_address' ,Ip_address
,'MAC_Address' ,MAC_Address
,'Gateway' ,Gateway
,'Mask' ,Mask
)
end
) as Network_Info
from (select ifn
,log_seq
,nwi_seq
,max (case when nwi_seq = 0 and key = 'Windows user' then val end) as Windows_user
,max (case when nwi_seq = 0 and key = 'Host name' then val end) as Host_name
,max (case when nwi_seq = 0 and key = 'Local time' then val end) as Local_time
,max (case when nwi_seq = 0 and key = 'System time' then val end) as System_time
,max (case when nwi_seq = 0 and key = 'ASCWebBrowser info' then val end) as ASCWebBrowser_info
,max (case when nwi_seq = 0 and key = 'Last Write Time' then val end) as Last_Write_Time
,max (case when nwi_seq = 0 and key = 'HD Info' then val end) as HD_Info
,max (case when nwi_seq > 0 and key = 'Index' then val end) as Index
,max (case when nwi_seq > 0 and key = 'Type' then val end) as Type
,max (case when nwi_seq > 0 and key = 'Description' then val end) as Description
,max (case when nwi_seq > 0 and key = 'Name' then val end) as Name
,max (case when nwi_seq > 0 and key = 'Ip address ' then val end) as Ip_address
,max (case when nwi_seq > 0 and key = 'MAC Address' then val end) as MAC_Address
,max (case when nwi_seq > 0 and key = 'Gateway' then val end) as Gateway
,max (case when nwi_seq > 0 and key = 'Mask' then val end) as Mask
from (select key
,val
,ifn
,log_seq
,count(case when key = 'Index' then 1 end) over
(
partition by ifn,log_seq
order by boif
) as nwi_seq
from (select key
,val
,input__file__name as ifn
,block__offset__inside__file as boif
,count(case when key = 'Windows user' then 1 end) over
(
partition by input__file__name
order by block__offset__inside__file
) as log_seq
from log
) l
) l
group by ifn
,log_seq
,nwi_seq
) l
group by ifn
,log_seq
;
+--------------+-----------+------------+-------------+--------------------+-------------------+---------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| windows_user | host_name | local_time | system_time | ascwebbrowser_info | last_write_time | hd_info | network_info |
+--------------+-----------+------------+-------------+--------------------+-------------------+---------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Pâmela | DV6000 | 14:25:07 | 17:25:07 | 1.1.1 | 07/19/2016 14:01 | Volume name: , Serial: 1713925408, File System: NTFS, Max Component Length: 255 | [{"index":"48","type":"1","description":"TAP-Win32 Adapter OAS #6","name":"{343D77F2-B3CE-414B-AE01-E248D3FC85F6}","ip_address":null,"mac_address":"00-FF-34-3D-77-F2","gateway":"0.0.0.0","mask":"255.255.0.0"},{"index":"38","type":"1","description":"TAP-Windows Adapter V9 #6","name":"{C81FC3F7-19F9-44DD-9470-4982F48A141D}","ip_address":null,"mac_address":"00-FF-C8-1F-C3-F7","gateway":"0.0.0.0","mask":"255.255.0.0"},{"index":"36","type":"1","description":"TAP-Win32 Adapter OAS #5","name":"{72115AC7-4EE2-4CB3-A8D2-","ip_address":null,"mac_address":null,"gateway":null,"mask":null}] |
+--------------+-----------+------------+-------------+--------------------+-------------------+---------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
关于python - 在 hive 或 pyspark 中透视日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44558044/
这是真的: log(A) + log(B) = log(A * B) [0] 这也是真的吗? O(log(A)) + O(log(B)) = O(log(A * B)) [1] 据我了解 O(f
日志 日志是构建工具的主要界面。如果日志太多,真正的警告和问题容易被隐藏。另一方面,如果出了错,你需要找出相关的信息。Gradle 定义了6个日志级别,如表 18.1,“日志级别”所示。除了那些您通
日志 关键进程日志如下…(将 替换为启动服务的用户,将 替换为计算机名称) NameNode: $ HADOOP_HOME / logs / hadoop- -namenode- .log Da
我正在探索项目的 git 历史 FFMpeg .我在提交之间对每个文件执行了更改 517573a67088b5c7a25c18373434e3448892ee93和 80bb65fafab1d2f5f
我不知道如何在 loggly 中使用正则表达式进行搜索。例如,使用表达式 /24nonstop.+7554/ 记录我想查找的内容. { "level_name": "WARNING", "ex
有没有办法为 API 调用打开日志记录? 我们有一个第三方应用程序在使用我们的商店时遇到问题,希望获得一些调试信息。 ~我已经搜索了 bt 一无所获。 我正在使用 1.7 最佳答案 在一段受控的时间内
我正在尝试获取 SVN 中所有副本/移动/等的固定路径的日志历史记录(如果可能的话,递归地)。实际上,我试图避免 peg revisions ,并将日志应用于路径而不是对象。 svn 手册提出了这个问
如何在命令行中运行 NAnt 脚本并在日志文件中获取每个任务的时间? using nant task or NAnt -buildfile:testscript.build testnanttarg
是否有任何默认方式来记录哪些用户代理访问了您的服务器?我需要编制一份访问我们网站的浏览器列表,以便我们知道我们最能支持什么。 谢谢! 最佳答案 日志CGI.HTTP_USER_AGENT ,也许在 A
我在我的应用程序中使用 Spring 发送电子邮件。 我想在发送电子邮件时记录 imap 服务器操作。 我尝试按如下方式在我的 applicationContext.xml 中实现日志:
我已经运行一个 pod 一个多星期了,从开始到现在没有重启过。但是,我仍然无法查看自它启动以来的日志,它只提供最近两天的日志。容器是否有任何日志轮换策略以及如何根据大小或日期控制轮换? 我尝试了以下命
背景: 我正在设置我的第一个 flex 堆栈,尽管我将开始简单,但是我想确保我从良好的体系结构开始。我最终希望有以下解决方案:托管指标,服务器日志(expressjs APM),单页应用程序监视(AP
常规的 hg log 命令给出每个变更集至少 4 行的输出。例如 changeset: 238:03a214f2a1cf user: My Name date: Th
我在我的项目中使用 Spring iBatis 框架。然后使用 logback 进行记录。然后,在检查日志文件时,我可以看到系统正在使用的数据库...出于安全目的我想隐藏它 这是示例日志.. 12:2
我想使用 hg log 生成一个简短的变更日志,涵盖最新版本的变更。发行版标有“v”前缀,例如“v0.9.1”或“v1.0”。是否可以使用 revsets 选择以“v”开头的最后两个标签之间的范围,不
我是 PHP 的新手,所以如果有一个简单的答案,请原谅我。我在 stackoverflow 中搜索过任何类似的问题,但找不到任何帮助。 我正在开发一个现有的基于 php 的应用程序,我只需要能够将对象
我有一个名为 Radius 的程序可以验证用户登录。运行在CentOS服务器上 日志在/var/log/radius.log 中 它们如下 Mon Jul 24 22:17:08 2017 : Aut
我最近从使用“日志”切换到“日志”。 到目前为止,还不错,但我缺少一项关键功能——在运行时更改最低级别的能力。 在“logging',我可以调用 myLogger.setLevel(logging.I
假设我们有速度关键的系统(例如统计/分析、套接字编程等),我们如何设计跟踪和日志。 更具体地说,日志和跟踪通常会降低性能(即使我们有关闭机制或冗长的扩展机制)。在这种情况下,是否有任何关于如何“放置”
有人知道这个 don't panic 日志包含什么类型的信息吗? /data/dontpanic 然后,我该如何分析这个日志? 最佳答案 我发现这个文件夹在内核崩溃发生后包含了一些 apanic 文件
我是一名优秀的程序员,十分优秀!