Magdalena Balazinska

191 papers A* 11A 16B 7C 1Misc 1Journal 99Unranked 50
YearRankTypeTitle / Venue / Authors
2026 J jnl
ACM Trans. Database Syst.
Kyle Deeds, Dan Suciu, Magdalena Balazinska, Walter Cai
2026 A conf
CIDR
Guorui Xiao, Enhao Zhang, Nicole Sullivan, Will Hansen, Magdalena Balazinska
2025 conf
HILDA@SIGMOD
Manasi Ganti, Enhao Zhang, Magdalena Balazinska
2025 J jnl
Proc. VLDB Endow.
Guorui Xiao, Dong He, Jin Wang, Magdalena Balazinska
2025 J jnl
Commun. ACM
Magdalena Balazinska, Jeff Dean, Urs Hölzle, Parthasarathy Ranganathan
2025 J jnl
Proc. ACM Manag. Data
Kyle Deeds, Willow Ahrens, Magdalena Balazinska, Dan Suciu
2025 J jnl
CoRR
Guorui Xiao, Enhao Zhang, Nicole Sullivan, Will Hansen, Magdalena Balazinska
2025 A* conf
ICDE
Dong He, Jieyu Zhang, Maureen Daum, Alexander Ratner, Magdalena Balazinska
2025 J jnl
Proc. ACM Manag. Data
Enhao Zhang, Nicole Sullivan, Brandon Haynes, Ranjay Krishna, Magdalena Balazinska
2025 J jnl
CoRR
Anastasia Ailamaki, Samuel Madden, Daniel Abadi, Gustavo Alonso, Sihem Amer-Yahia, Magdalena Balazinska, Philip A. Bernstein, Peter Boncz, Michael J. Cafarella, Surajit Chaudhuri, Susan B. Davidson, David J. DeWitt, Yanlei Diao, Xin Luna Dong, Michael J. Franklin, Juliana Freire, Johannes Gehrke, Alon Y. Halevy, Joseph M. Hellerstein, Mark D. Hill, Stratos Idreos, Yannis E. Ioannidis, Christoph Koch, Donald Kossmann, Tim Kraska, Arun Kumar, Guoliang Li, Volker Markl, Renée J. Miller, C. Mohan, Thomas Neumann, Beng Chin Ooi, Fatma Ozcan, Aditya G. Parameswaran, Ippokratis Pandis, Jignesh M. Patel, Andrew Pavlo, Danica Porobic, Viktor Sanca, Michael Stonebraker, Julia Stoyanovich, Dan Suciu, Wang-Chiew Tan, Shivaram Venkataraman, Matei Zaharia, Stanley B. Zdonik
2024 J jnl
CoRR
Lindsey Linxi Wei, Chung Yik Edward Yeung, Hongjian Yu, Jingchuan Zhou, Dong He, Magdalena Balazinska
2024 J jnl
Proc. VLDB Endow.
Lindsey Linxi Wei, Chung Yik Edward Yeung, Hongjian Yu, Jingchuan Zhou, Dong He, Magdalena Balazinska
2024 J jnl
CoRR
Linxi Wei, Guorui Xiao, Magdalena Balazinska
2024 J jnl
CoRR
Enhao Zhang, Nicole Sullivan, Brandon Haynes, Ranjay Krishna, Magdalena Balazinska
2023 J jnl
Proc. VLDB Endow.
Enhao Zhang, Maureen Daum, Dong He, Manasi Ganti, Brandon Haynes, Ranjay Krishna, Magdalena Balazinska
2023 J jnl
CoRR
Enhao Zhang, Maureen Daum, Dong He, Magdalena Balazinska, Brandon Haynes, Ranjay Krishna
2023 J jnl
Proc. VLDB Endow.
Enhao Zhang, Maureen Daum, Dong He, Brandon Haynes, Ranjay Krishna, Magdalena Balazinska
2023 J jnl
CoRR
Dong He, Jieyu Zhang, Maureen Daum, Alexander Ratner, Magdalena Balazinska
2023 J jnl
Proc. ACM Manag. Data
Kyle B. Deeds, Dan Suciu, Magdalena Balazinska
2023 J jnl
CoRR
Maureen Daum, Enhao Zhang, Dong He, Stephen Mussmann, Brandon Haynes, Ranjay Krishna, Magdalena Balazinska
2023 J jnl
Proc. VLDB Endow.
Maureen Daum, Enhao Zhang, Dong He, Stephen Mussmann, Brandon Haynes, Ranjay Krishna, Magdalena Balazinska
2022 J jnl
Proc. VLDB Endow.
Magdalena Balazinska, Surajit Chaudhuri, AnHai Doan, Joseph M. Hellerstein, Hanuma Kodavalla, Ippokratis Pandis, Matei Zaharia
2022 J jnl
VLDB J.
Magdalena Balazinska, Xiaofang Zhou
2022 conf
SIGMOD Conference
Anastasia Ailamaki, Leilani Battle, Johannes Gehrke, Masaru Kitsuregawa, David Maier, Christopher Ré, Meihui Zhang, Magdalena Balazinska
2022 J jnl
Commun. ACM
Daniel Abadi, Anastasia Ailamaki, David G. Andersen, Peter Bailis, Magdalena Balazinska, Philip A. Bernstein, Peter Boncz, Surajit Chaudhuri, Alvin Cheung, AnHai Doan, Luna Dong, Michael J. Franklin, Juliana Freire, Alon Y. Halevy, Joseph M. Hellerstein, Stratos Idreos, Donald Kossmann, Tim Kraska, Sailesh Krishnamurthy, Volker Markl, Sergey Melnik, Tova Milo, C. Mohan, Thomas Neumann, Beng Chin Ooi, Fatma Ozcan, Jignesh M. Patel, Andrew Pavlo, Raluca A. Popa, Raghu Ramakrishnan, Christopher Ré, Michael Stonebraker, Dan Suciu
2022 A conf
CIDR
Maureen Daum, Enhao Zhang, Dong He, Magdalena Balazinska, Brandon Haynes, Ranjay Krishna, Apryle Craig, Aaron Wirsing
2021 J jnl
SIGMOD Rec.
Magdalena Balazinska
2021 J jnl
CoRR
Dong He, Maureen Daum, Magdalena Balazinska
2021 J jnl
Proc. VLDB Endow.
Dong He, Maureen Daum, Walter Cai, Magdalena Balazinska
2021 J jnl
Proc. VLDB Endow.
Vanessa Lin, Yongming Ge, Maureen Daum, Alvin Cheung, Brandon Haynes, Magdalena Balazinska
2021 A* conf
ICDE
Maureen Daum, Brandon Haynes, Dong He, Amrita Mazumdar, Magdalena Balazinska
2021 J jnl
CoRR
Brandon Haynes, Maureen Daum, Dong He, Amrita Mazumdar, Magdalena Balazinska, Alvin Cheung, Luis Ceze
2021 conf
SIGMOD Conference
Brandon Haynes, Maureen Daum, Dong He, Amrita Mazumdar, Magdalena Balazinska, Alvin Cheung, Luis Ceze
2020 B conf
SSDBM
Jingjing Wang, Magdalena Balazinska
2020 J jnl
VLDB J.
Laurel J. Orr, Magdalena Balazinska, Dan Suciu
2020 J jnl
Proc. VLDB Endow.
Magdalena Balazinska, Xiaofang Zhou
2020 J jnl
Proc. VLDB Endow.
Magdalena Balazinska, Xiaofang Zhou
2020 J jnl
Proc. VLDB Endow.
Magdalena Balazinska, Xiaofang Zhou
2020 J jnl
Proc. VLDB Endow.
Magdalena Balazinska, Xiaofang Zhou
2020 J jnl
Proc. VLDB Endow.
Magdalena Balazinska, Xiaofang Zhou
2020 J jnl
Proc. VLDB Endow.
Magdalena Balazinska, Xiaofang Zhou
2020 J jnl
Proc. VLDB Endow.
Magdalena Balazinska, Xiaofang Zhou
2020 J jnl
Proc. VLDB Endow.
Magdalena Balazinska, Xiaofang Zhou
2020 A conf
CIDR
Laurel J. Orr, Samuel K. Ainsworth, Kevin Jamieson, Walter Cai, Magdalena Balazinska, Dan Suciu
2020 conf
SIGMOD Conference
Laurel J. Orr, Magdalena Balazinska, Dan Suciu
2020 J jnl
CoRR
Parmita Mehta, Stephen Portillo, Magdalena Balazinska, Andrew J. Connolly
2020 J jnl
CoRR
Maureen Daum, Brandon Haynes, Dong He, Amrita Mazumdar, Magdalena Balazinska, Alvin Cheung
2020 A* conf
ICDE
Parmita Mehta, Stephen Portillo, Magdalena Balazinska, Andrew J. Connolly
2020 A conf
CIDR
Brandon Haynes, Maureen Daum, Amrita Mazumdar, Magdalena Balazinska, Alvin Cheung, Luis Ceze
2019 J jnl
CoRR
Jennifer Ortiz, Magdalena Balazinska, Johannes Gehrke, S. Sathiya Keerthi
2019 ch.
Making Databases Work
Magdalena Balazinska, Stan Zdonik
2019 J jnl
CoRR
Laurel J. Orr, Magdalena Balazinska, Dan Suciu
2019 J jnl
Proc. VLDB Endow.
Magdalena Balazinska, Xiaofang Zhou
2019 J jnl
Proc. VLDB Endow.
Magdalena Balazinska, Xiaofang Zhou
2019 J jnl
Proc. VLDB Endow.
Magdalena Balazinska, Xiaofang Zhou
2019 J jnl
Proc. VLDB Endow.
Magdalena Balazinska, Xiaofang Zhou
2019 conf
SIGMOD Conference
Walter Cai, Magdalena Balazinska, Dan Suciu
2019 J jnl
SIGMOD Rec.
Daniel Abadi, Anastasia Ailamaki, David G. Andersen, Peter Bailis, Magdalena Balazinska, Philip A. Bernstein, Peter Boncz, Surajit Chaudhuri, Alvin Cheung, AnHai Doan, Luna Dong, Michael J. Franklin, Juliana Freire, Alon Y. Halevy, Joseph M. Hellerstein, Stratos Idreos, Donald Kossmann, Tim Kraska, Sailesh Krishnamurthy, Volker Markl, Sergey Melnik, Tova Milo, C. Mohan, Thomas Neumann, Beng Chin Ooi, Fatma Ozcan, Jignesh M. Patel, Andrew Pavlo, Raluca A. Popa, Raghu Ramakrishnan, Christopher Ré, Michael Stonebraker, Dan Suciu
2019 J jnl
CoRR
Amrita Mazumdar, Brandon Haynes, Magdalena Balazinska, Luis Ceze, Alvin Cheung, Mark Oskin
2019 conf
SIGMOD Conference
Brandon Haynes, Amrita Mazumdar, Magdalena Balazinska, Luis Ceze, Alvin Cheung
2018 J jnl
CoRR
Tomer Kaftan, Magdalena Balazinska, Alvin Cheung, Johannes Gehrke
2018 ch.
Encyclopedia of Database Systems (2nd ed.)
Magdalena Balazinska, Jeong-Hyon Hwang, Mehul A. Shah
2018 conf
DEEM@SIGMOD
Jennifer Ortiz, Magdalena Balazinska, Johannes Gehrke, S. Sathiya Keerthi
2018 J jnl
CoRR
Jennifer Ortiz, Magdalena Balazinska, Johannes Gehrke, S. Sathiya Keerthi
2018 J jnl
Proc. VLDB Endow.
Brandon Haynes, Amrita Mazumdar, Armin Alaghi, Magdalena Balazinska, Luis Ceze, Alvin Cheung
2018 conf
USENIX ATC
Jennifer Ortiz, Brendan Lee, Magdalena Balazinska, Johannes Gehrke, Joseph L. Hellerstein
2017 conf
SIGMOD Conference
Helga Gudmundsdottir, Babak Salimi, Magdalena Balazinska, Dan R. K. Ports, Dan Suciu
2017 A conf
CIDR
Magdalena Balazinska, Luis Ceze, Alvin Cheung, Brian Curless, Steven M. Seitz
2017 J jnl
Proc. VLDB Endow.
Parmita Mehta, Sven Dorkenwald, Dongfang Zhao, Tomer Kaftan, Alvin Cheung, Magdalena Balazinska, Ariel Rokem, Andrew J. Connolly, Jacob VanderPlas, Yusra AlSayyad
2017 conf
USENIX ATC
Jingjing Wang, Magdalena Balazinska
2017 J jnl
CoRR
Laurel J. Orr, Magdalena Balazinska, Dan Suciu
2017 J jnl
Proc. VLDB Endow.
Laurel J. Orr, Dan Suciu, Magdalena Balazinska
2017 A conf
CIDR
Jingjing Wang, Tobin Baker, Magdalena Balazinska, Daniel Halperin, Brandon Haynes, Bill Howe, Dylan Hutchison, Shrainik Jain, Ryan Maas, Parmita Mehta, Dominik Moritz, Brandon Myers, Jennifer Ortiz, Dan Suciu, Andrew Whitaker, Shengliang Xu
2017 conf
SIGMOD Conference
Brandon Haynes, Artem Minyaylov, Magdalena Balazinska, Luis Ceze, Alvin Cheung
2016 J jnl
CoRR
Parmita Mehta, Sven Dorkenwald, Dongfang Zhao, Tomer Kaftan, Alvin Cheung, Magdalena Balazinska, Ariel Rokem, Andrew J. Connolly, Jacob VanderPlas, Yusra AlSayyad
2016 conf
SIGMOD Conference
Jennifer Ortiz, Brendan Lee, Magdalena Balazinska
2016 J jnl
CoRR
Jennifer Ortiz, Brendan Lee, Magdalena Balazinska, Joseph L. Hellerstein
2016 conf
SoCC
Brandon Haynes, Alvin Cheung, Magdalena Balazinska
2016 J jnl
CoRR
Brandon Haynes, Alvin Cheung, Magdalena Balazinska
2016 J jnl
Proc. VLDB Endow.
Prasang Upadhyaya, Magdalena Balazinska, Dan Suciu
2016 ch.
Data Stream Management
Ugur Çetintemel, Daniel J. Abadi, Yanif Ahmad, Hari Balakrishnan, Magdalena Balazinska, Mitch Cherniack, Jeong-Hyon Hwang, Samuel Madden, Anurag Maskey, Alexander Rasin, Esther Ryvkina, Mike Stonebraker, Nesime Tatbul, Ying Xing, Stan Zdonik
2016 J jnl
Commun. ACM
Daniel Abadi, Rakesh Agrawal, Anastasia Ailamaki, Magdalena Balazinska, Philip A. Bernstein, Michael J. Carey, Surajit Chaudhuri, Jeffrey Dean, AnHai Doan, Michael J. Franklin, Johannes Gehrke, Laura M. Haas, Alon Y. Halevy, Joseph M. Hellerstein, Yannis E. Ioannidis, H. V. Jagadish, Donald Kossmann, Samuel Madden, Sharad Mehrotra, Tova Milo, Jeffrey F. Naughton, Raghu Ramakrishnan, Volker Markl, Christopher Olston, Beng Chin Ooi, Christopher Ré, Dan Suciu, Michael Stonebraker, Todd Walter, Jennifer Widom
2016 conf
BeyondMR@SIGMOD
Jingjing Wang, Magdalena Balazinska
2016 J jnl
CoRR
Kristi Morton, Hannaneh Hajishirzi, Magdalena Balazinska, Dan Grossman
2015 J jnl
Proc. VLDB Endow.
Aaron J. Elmore, Jennie Duggan, Mike Stonebraker, Magdalena Balazinska, Ugur Çetintemel, Vijay Gadepally, Jeffrey Heer, Bill Howe, Jeremy Kepner, Tim Kraska, Samuel Madden, David Maier, Timothy G. Mattson, Stavros Papadopoulos, Jeff Parkhurst, Nesime Tatbul, Manasi Vartak, Stan Zdonik
2015 J jnl
Proc. VLDB Endow.
Jingjing Wang, Magdalena Balazinska, Daniel Halperin
2015 conf
Big-O(Q)/DMAH@VLDB
C. David Williams, Magdalena Balazinska, Thomas L. Daniel
2015 conf
SIGMOD Conference
Prasang Upadhyaya, Magdalena Balazinska, Dan Suciu
2015 J jnl
Proc. VLDB Endow.
Magdalena Balazinska
2015 A conf
CIDR
Jennifer Ortiz, Victor Teixeira de Almeida, Magdalena Balazinska
2015 J jnl
CoRR
Emad Soroush, Magdalena Balazinska, K. Simon Krughoff, Andrew J. Connolly
2015 B conf
SSDBM
Emad Soroush, Magdalena Balazinska, K. Simon Krughoff, Andrew J. Connolly
2015 conf
SIGMOD Conference
Shumo Chu, Magdalena Balazinska, Dan Suciu
2015 J jnl
Proc. VLDB Endow.
Magdalena Balazinska
2015 conf
IMDM@VLDB
Ryan Maas, Jeremy Hyrkas, Olivia Grace Telford, Magdalena Balazinska, Andrew J. Connolly, Bill Howe
2015 conf
SIGMOD Conference
Christopher Ré, Divy Agrawal, Magdalena Balazinska, Michael J. Cafarella, Michael I. Jordan, Tim Kraska, Raghu Ramakrishnan
2015 ed.
SoCC
Shahram Ghandeharizadeh, Sumita Barahmand, Magdalena Balazinska, Michael J. Freedman
2015 J jnl
J. ACM
Paraschos Koutris, Prasang Upadhyaya, Magdalena Balazinska, Bill Howe, Dan Suciu
2015 J jnl
SIGMOD Rec.
Jennie Duggan, Aaron J. Elmore, Michael Stonebraker, Magdalena Balazinska, Bill Howe, Jeremy Kepner, Sam Madden, David Maier, Tim Mattson, Stanley B. Zdonik
2014 conf
Data4U@VLDB
Prasang Upadhyaya, Martina Unutzer, Magdalena Balazinska, Dan Suciu, Hakan Hacigümüs
2014 J jnl
Inf. Syst.
Julie Letchner, Magdalena Balazinska, Christopher Ré, Matthai Philipose
2014 conf
DanaC@SIGMOD
Sarah Loebman, Jennifer Ortiz, Lee Lee Choo, Laurel J. Orr, Lauren Anderson, Daniel Halperin, Magdalena Balazinska, Thomas Quinn, Fabio Governato
2014 conf
SIGMOD Conference
Daniel Halperin, Victor Teixeira de Almeida, Lee Lee Choo, Shumo Chu, Paraschos Koutris, Dominik Moritz, Jennifer Ortiz, Vaspol Ruamviboonsuk, Jingjing Wang, Andrew Whitaker, Shengliang Xu, Magdalena Balazinska, Bill Howe, Dan Suciu
2014 J jnl
SIGMOD Rec.
Kristi Morton, Magdalena Balazinska, Dan Grossman, Robert Kosara, Jock D. Mackinlay
2014 J jnl
Proc. VLDB Endow.
Kristi Morton, Magdalena Balazinska, Dan Grossman, Jock D. Mackinlay
2014 J jnl
SIGMOD Rec.
Daniel J. Abadi, Rakesh Agrawal, Anastasia Ailamaki, Magdalena Balazinska, Philip A. Bernstein, Michael J. Carey, Surajit Chaudhuri, Jeffrey Dean, AnHai Doan, Michael J. Franklin, Johannes Gehrke, Laura M. Haas, Alon Y. Halevy, Joseph M. Hellerstein, Yannis E. Ioannidis, H. V. Jagadish, Donald Kossmann, Samuel Madden, Sharad Mehrotra, Tova Milo, Jeffrey F. Naughton, Raghu Ramakrishnan, Volker Markl, Christopher Olston, Beng Chin Ooi, Christopher Ré, Dan Suciu, Michael Stonebraker, Todd Walter, Jennifer Widom
2014 J jnl
SIGMOD Rec.
Magdalena Balazinska, Bill Howe, Dan Suciu
2013 J jnl
Proc. VLDB Endow.
Matthew I. Moyers, Emad Soroush, Spencer Wallace, K. Simon Krughoff, Jake VanderPlas, Magdalena Balazinska, Andrew J. Connolly
2013 conf
In Search of Elegance in the Theory and Practice of Computation
Magdalena Balazinska, Bill Howe, Paraschos Koutris, Dan Suciu, Prasang Upadhyaya
2013 conf
DanaC@SIGMOD
Jennifer Ortiz, Victor Teixeira de Almeida, Magdalena Balazinska
2013 B ed.
SSDBM
Alex Szalay, Tamas Budavari, Magdalena Balazinska, Alexandra Meliou, Ahmet Sacan
2013 B conf
SSDBM
Magdalena Balazinska, Susan B. Davidson, Bill Howe, Alexandros Labrinidis
2013 J jnl
Proc. VLDB Endow.
Kai Ren, YongChul Kwon, Magdalena Balazinska, Bill Howe
2013 J jnl
IEEE Data Eng. Bull.
YongChul Kwon, Kai Ren, Magdalena Balazinska, Bill Howe
2013 J jnl
IEEE Data Eng. Bull.
Jacob VanderPlas, Emad Soroush, K. Simon Krughoff, Magdalena Balazinska
2013 A conf
CIDR
Prasang Upadhyaya, Nick R. Anderson, Magdalena Balazinska, Bill Howe, Raghav Kaushik, Ravishankar Ramamurthy, Dan Suciu
2013 conf
SIGMOD Conference
Prasang Upadhyaya, Nick R. Anderson, Magdalena Balazinska, Bill Howe, Raghav Kaushik, Ravishankar Ramamurthy, Dan Suciu
2013 A* conf
ICDE
Emad Soroush, Magdalena Balazinska
2013 conf
SIGMOD Conference
Paraschos Koutris, Prasang Upadhyaya, Magdalena Balazinska, Bill Howe, Dan Suciu
2012 conf
SC Companion
Kai Ren, Garth Gibson, YongChul Kwon, Magdalena Balazinska, Bill Howe
2012 conf
SoCC
Foto N. Afrati, Magdalena Balazinska, Anish Das Sarma, Bill Howe, Semih Salihoglu, Jeffrey D. Ullman
2012 J jnl
CoRR
Prasang Upadhyaya, Magdalena Balazinska, Dan Suciu
2012 J jnl
Proc. VLDB Endow.
Prasang Upadhyaya, Magdalena Balazinska, Dan Suciu
2012 J jnl
CoRR
Nodira Khoussainova, Magdalena Balazinska, Dan Suciu
2012 J jnl
Proc. VLDB Endow.
Nodira Khoussainova, Magdalena Balazinska, Dan Suciu
2012 conf
SC Companion
Kai Ren, Garth Gibson, YongChul Kwon, Magdalena Balazinska, Bill Howe
2012 A* conf
PODS
Paraschos Koutris, Prasang Upadhyaya, Magdalena Balazinska, Bill Howe, Dan Suciu
2012 J jnl
Proc. VLDB Endow.
Paraschos Koutris, Prasang Upadhyaya, Magdalena Balazinska, Bill Howe, Dan Suciu
2012 J jnl
Proc. VLDB Endow.
YongChul Kwon, Magdalena Balazinska, Bill Howe, Jerome A. Rolia
2012 conf
SIGMOD Conference
YongChul Kwon, Magdalena Balazinska, Bill Howe, Jerome A. Rolia
2012 J jnl
VLDB J.
Yingyi Bu, Bill Howe, Magdalena Balazinska, Michael D. Ernst
2011 conf
SIGMOD Conference
Prasang Upadhyaya, YongChul Kwon, Magdalena Balazinska
2011 conf
SIGMOD Conference
Emad Soroush, Magdalena Balazinska, Daniel L. Wang
2011 J jnl
Proc. VLDB Endow.
Magdalena Balazinska, Bill Howe, Dan Suciu
2011 conf
EDBT/ICDT Array Databases Workshop
Emad Soroush, Magdalena Balazinska
2011 conf
MobiDE
Julie Letchner, Magdalena Balazinska
2011 B conf
SSDBM
Nodira Khoussainova, YongChul Kwon, Wei-Ting Liao, Magdalena Balazinska, Wolfgang Gatterbauer, Dan Suciu
2011 B conf
SSDBM
Yusra AlSayyad, K. Simon Krughoff, Bill Howe, Andrew J. Connolly, Magdalena Balazinska, Lynne Jones
2010 A* conf
ICDE
Julie Letchner, Christopher Ré, Magdalena Balazinska, Matthai Philipose
2010 J jnl
CoRR
Keith Wiley, Andrew J. Connolly, Jeffrey P. Gardner, K. Simon Krughoff, Magdalena Balazinska, Bill Howe, YongChul Kwon, Yingyi Bu
2010 A* conf
ICDE
Kristi Morton, Abram L. Friesen, Magdalena Balazinska, Dan Grossman
2010 J jnl
Proc. VLDB Endow.
Yingyi Bu, Bill Howe, Magdalena Balazinska, Michael D. Ernst
2010 conf
SIGMOD Conference
Kristi Morton, Magdalena Balazinska, Dan Grossman
2010 B conf
SSDBM
YongChul Kwon, Dylan Nunley, Jeffrey P. Gardner, Magdalena Balazinska, Bill Howe, Sarah Loebman
2010 conf
SoCC
YongChul Kwon, Magdalena Balazinska, Bill Howe, Jerome A. Rolia
2010 J jnl
Proc. VLDB Endow.
Nodira Khoussainova, YongChul Kwon, Magdalena Balazinska, Dan Suciu
2010 conf
Pervasive
Evan Welbourne, Magdalena Balazinska, Gaetano Borriello, James Fogarty
2009 J jnl
CoRR
Nodira Khoussainova, Magdalena Balazinska, Wolfgang Gatterbauer, YongChul Kwon, Dan Suciu
2009 A conf
CIDR
Nodira Khoussainova, Magdalena Balazinska, Wolfgang Gatterbauer, YongChul Kwon, Dan Suciu
2009 J jnl
Proc. VLDB Endow.
Philippe Cudré-Mauroux, Hideaki Kimura, Kian-Tat Lim, Jennie Rogers, Roman Simakov, Emad Soroush, Pavel E. Velikhov, Daniel L. Wang, Magdalena Balazinska, Jacek Becla, David J. DeWitt, Bobbi Heath, David Maier, Samuel Madden, Jignesh M. Patel, Michael Stonebraker, Stanley B. Zdonik
2009 A* conf
ICDE
Julie Letchner, Christopher Ré, Magdalena Balazinska, Matthai Philipose
2009 C conf
CLUSTER
Sarah Loebman, Dylan Nunley, YongChul Kwon, Bill Howe, Magdalena Balazinska, Jeffrey P. Gardner
2009 J jnl
CoRR
Wolfgang Gatterbauer, Magdalena Balazinska, Nodira Khoussainova, Dan Suciu
2009 J jnl
Proc. VLDB Endow.
Wolfgang Gatterbauer, Magdalena Balazinska, Nodira Khoussainova, Dan Suciu
2009 J jnl
IEEE Internet Comput.
Evan Welbourne, Leilani Battle, Garrett Cole, Kayla Gould, Kyle Rector, Samuel Raymer, Magdalena Balazinska, Gaetano Borriello
2009 ch.
Encyclopedia of Database Systems
Magdalena Balazinska, Jeong-Hyon Hwang, Mehul A. Shah
2009 J jnl
Proc. VLDB Endow.
Julie Letchner, Christopher Ré, Magdalena Balazinska, Matthai Philipose
2009 A conf
MobiSys
Evan Welbourne, Karl Koscher, Emad Soroush, Magdalena Balazinska, Gaetano Borriello
2008 conf
SIGMOD Conference
Nodira Khoussainova, Evan Welbourne, Magdalena Balazinska, Gaetano Borriello, Garrett Cole, Julie Letchner, Yang Li, Christopher Ré, Dan Suciu, Jordan Walke
2008 A conf
MobiSys
Evan Welbourne, Nodira Khoussainova, Julie Letchner, Yang Li, Magdalena Balazinska, Gaetano Borriello, Dan Suciu
2008 J jnl
IEEE Internet Comput.
Julie Letchner, Christopher Ré, Magdalena Balazinska, Matthai Philipose
2008 conf
ICDM Workshops
YongChul Kwon, Wing Yee Lee, Magdalena Balazinska, Guiping Xu
2008 conf
SIGMOD Conference
Christopher Ré, Julie Letchner, Magdalena Balazinska, Dan Suciu
2008 J jnl
ACM Trans. Database Syst.
Magdalena Balazinska, Hari Balakrishnan, Samuel Madden, Michael Stonebraker
2008 J jnl
Proc. VLDB Endow.
YongChul Kwon, Magdalena Balazinska, Albert G. Greenberg
2008 A* conf
ICDE
Nodira Khoussainova, Magdalena Balazinska, Dan Suciu
2008 J jnl
Proc. VLDB Endow.
Magdalena Balazinska, Christopher Ré, Dan Suciu
2007 conf
PerCom Workshops
Evan Welbourne, Magdalena Balazinska, Gaetano Borriello, Waylon Brunette
2007 J jnl
IEEE Pervasive Comput.
Magdalena Balazinska, Amol Deshpande, Michael J. Franklin, Phillip B. Gibbons, Jim Gray, Mark H. Hansen, Michael Liebhold, Suman Nath, Alexander S. Szalay, Vincent Tao
2007 conf
SIGMOD Conference
Roxana Geambasu, Magdalena Balazinska, Steven D. Gribble, Henry M. Levy
2007 A conf
CIDR
Magdalena Balazinska, YongChul Kwon, Nathan Kuchta, Dennis Lee
2007 conf
NetDB
Roxana Geambasu, Tanya Bragin, Jaeyeon Jung, Magdalena Balazinska
2007 J jnl
IEEE Pervasive Comput.
Travis Kriplean, Evan Welbourne, Nodira Khoussainova, Vibhor Rastogi, Magdalena Balazinska, Gaetano Borriello, Tadayoshi Kohno, Dan Suciu
2007 J jnl
SIGMOD Rec.
Magdalena Balazinska, Amol Deshpande, Alexandros Labrinidis, Qiong Luo, Samuel Madden, Jun Yang
2006 conf
MobiDE
Nodira Khoussainova, Magdalena Balazinska, Dan Suciu
2005
Magdalena Balazinska
2005 conf
SIGMOD Conference
Magdalena Balazinska, Hari Balakrishnan, Samuel Madden, Michael Stonebraker
2005 A* conf
ICDE
Jeong-Hyon Hwang, Magdalena Balazinska, Alex Rasin, Ugur Çetintemel, Michael Stonebraker, Stanley B. Zdonik
2005 A conf
CIDR
Daniel J. Abadi, Yanif Ahmad, Magdalena Balazinska, Ugur Çetintemel, Mitch Cherniack, Jeong-Hyon Hwang, Wolfgang Lindner, Anurag Maskey, Alex Rasin, Esther Ryvkina, Nesime Tatbul, Ying Xing, Stanley B. Zdonik
2004 Misc conf
NSDI
Magdalena Balazinska, Hari Balakrishnan, Michael Stonebraker
2004 conf
SIGMOD Conference
Magdalena Balazinska, Hari Balakrishnan, Michael Stonebraker
2004 J jnl
VLDB J.
Hari Balakrishnan, Magdalena Balazinska, Donald Carney, Ugur Çetintemel, Mitch Cherniack, Christian Convey, Eduardo F. Galvez, Jon Salz, Michael Stonebraker, Nesime Tatbul, Richard Tibbetts, Stanley B. Zdonik
2003 A conf
MobiSys
Magdalena Balazinska, Paul C. Castro
2003 A conf
CIDR
Mitch Cherniack, Hari Balakrishnan, Magdalena Balazinska, Donald Carney, Ugur Çetintemel, Ying Xing, Stanley B. Zdonik
2003 J jnl
IEEE Data Eng. Bull.
Stanley B. Zdonik, Michael Stonebraker, Mitch Cherniack, Ugur Çetintemel, Magdalena Balazinska, Hari Balakrishnan
2003 A conf
Privacy Enhancing Technologies
Nick Feamster, Magdalena Balazinska, Winston Wang, Hari Balakrishnan, David R. Karger
2002 conf
Pervasive
Magdalena Balazinska, Hari Balakrishnan, David R. Karger
2002 A* conf
USENIX Security Symposium
Nick Feamster, Magdalena Balazinska, Greg Harfst, Hari Balakrishnan, David R. Karger
2000 conf
WCRE
Magdalena Balazinska, Ettore Merlo, Michel R. Dagenais, Bruno Laguë, Kostas Kontogiannis
1999 conf
IEEE METRICS
Magdalena Balazinska, Ettore Merlo, Michel R. Dagenais, Bruno Laguë, Kostas Kontogiannis
1999 conf
WCRE
Magdalena Balazinska, Ettore Merlo, Michel R. Dagenais, Bruno Laguë, Kostas Kontogiannis
redb/extractors/pe_extractors/pe_dotnet.py
← Index redb/extractors/pe_extractors/pe_dotnet.py python
import inspect
import pefile
from dotnetfile import DotNetPE

import base64
from hashlib import md5
from pprint import pprint

import magic
import pefile

from redb.extractors.enum import Tag
from redb.extractors.pe_extractor import PEExtractor
from redb.models.dataclasses import PEDotNet
from datetime import datetime, timezone
import json
from typing import Any


class PEDotNetExtractor(PEExtractor):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        pe=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            pe,
        )
        # self.pe_features = None
        self.elastic_index = self.index_prefix + "-pe_dotnet"
        self.dotnet, self.error = self._generate_dotnetfile_object()
        self.log.debug(inspect.currentframe().f_code.co_name)

    def _decode_assembly_flags(self, flag_value):
        self.log.debug(inspect.currentframe().f_code.co_name)
        ASSEMBLY_FLAGS = {
            0x00000001: "COMIMAGE_FLAGS_ILONLY",
            0x00000002: "COMIMAGE_FLAGS_32BITREQUIRED",
            0x00000004: "COMIMAGE_FLAGS_IL_LIBRARY",
            0x00000008: "COMIMAGE_FLAGS_STRONGNAMESIGNED",
            0x00000010: "COMIMAGE_FLAGS_NATIVE_ENTRYPOINT",
            0x00010000: "COMIMAGE_FLAGS_TRACKDEBUGDATA",
            0x00020000: "COMIMAGE_FLAGS_32BITPREFERRED",
        }
        flags = []
        for bit, name in ASSEMBLY_FLAGS.items():
            if flag_value & bit:
                flags.append(name)
        return flags

    def _normalize_data(self, data):
        self.log.debug(inspect.currentframe().f_code.co_name)
        if isinstance(data, str):
            return {"value": data}
        return data

    def _compute_md5(self, data):
        self.log.debug(inspect.currentframe().f_code.co_name)
        if isinstance(data, str):
            # If it's a string, encode it to first
            return md5(data.encode("raw_unicode_escape")).hexdigest()
        elif not isinstance(data, bytes):
            # If it's neither string nor bytes, convert it to string and then to bytes
            return md5(str(data).encode("raw_unicode_escape")).hexdigest()
        else:
            return md5(data).hexdigest()

    def tag(self):
        return Tag.PE_DOTNET.value

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        metadata = {}

        if self.error:
            metadata["Corrupted"] = self.error.args[0]
            dotnet = PEDotNet(metadata)
            self.dotnet = dotnet  # Store for later use in prepare_export_data
            return dotnet  # Return the extracted data instead of exporting directly

        metadata["info"] = {}
        try:
            available_tables = self.dotnet.existent_metadata_tables()
        except Exception as e:
            self.log.error(f"Error getting metadata tables for {self.hash.sha256}: {e}")
            available_tables = []
            metadata["info"]["PotentiallyCorrupted"] = True

        # GUID extraction
        try:
            input_string = self.dotnet.guid_stream_guids[0].string_representation
            
            formatted_uuid = (
                f"{input_string[6:8]}{input_string[4:6]}{input_string[2:4]}{input_string[0:2]}"
                f"-{input_string[10:12]}{input_string[8:10]}"
                f"-{input_string[14:16]}{input_string[12:14]}"
                f"-{input_string[16:20]}"
                f"-{input_string[20:]}"
            )
            metadata["info"]["ModuleVersionID"] = formatted_uuid
        except Exception as e:
            self.log.error(f"Error extracting GUID for {self.hash.sha256}: {e}")

        # CLR Version
        try:
            metadata["info"]["CLRversion"] = self.dotnet.get_runtime_target_version()
        except Exception as e:
            self.log.error(f"Error getting CLR version for {self.hash.sha256}: {e}")

        # Module information
        try:
            if self.dotnet.metadata_table_exists("Module"):
                metadata["info"]["AssemblyModuleName"] = self.dotnet.Module.get_module_name()
        except Exception as e:
            self.log.error(f"Error getting module info for {self.hash.sha256}: {e}")

        # Basic properties
        try:
            metadata["info"].update({
                "IsNativeNgenImage": self.dotnet.is_native_image(),
                "IsMixedAssembly": self.dotnet.is_mixed_assembly(),
                "IsWindowsFormsApp": self.dotnet.is_windows_forms_app(),
                "EntryPointToken": self.dotnet.clr_header.EntryPointToken.value,
                "HasNativeEntryPoint": self.dotnet.has_native_entry_point(),
            })
        except Exception as e:
            self.log.error(f"Error getting basic properties for {self.hash.sha256}: {e}")

        # Assembly flags
        try:
            metadata["info"]["AssemblyFlags"] = self._decode_assembly_flags(
                self.dotnet.clr_header.Flags.value
            )
        except Exception as e:
            self.log.error(f"Error getting assembly flags for {self.hash.sha256}: {e}")

        # More Metadata/Info CLR Header
        try:
            metadata["info"]["NumOfStreams"] = self.dotnet.get_number_of_streams()
            # [TODO] The following two on VT are "RVA entry point"
            #  and "Resources va" respectively. To verify.
            metadata["info"][
                "ResourcesDirectoryAddress"
            ] = self.dotnet.clr_header.ResourcesDirectoryAddress.value
            metadata["info"][
                "ResourcesDirectorySize"
            ] = self.dotnet.clr_header.ResourcesDirectorySize.value
            metadata["info"][
                "StrongNameSignatureAddress"
            ] = self.dotnet.clr_header.StrongNameSignatureAddress.value
            metadata["info"][
                "StrongNameSignatureSize"
            ] = self.dotnet.clr_header.StrongNameSignatureSize.value
            metadata["info"][
                "CodeManagerTableAddress"
            ] = self.dotnet.clr_header.CodeManagerTableAddress.value
            metadata["info"][
                "CodeManagerTableSize"
            ] = self.dotnet.clr_header.CodeManagerTableSize.value
            metadata["info"][
                "VTableFixupsAddress"
            ] = self.dotnet.clr_header.VTableFixupsAddress.value
            metadata["info"][
                "VTableFixupsSize"
            ] = self.dotnet.clr_header.VTableFixupsSize.value
            metadata["info"][
                "ExportAddressTableJumpsAddress"
            ] = self.dotnet.clr_header.ExportAddressTableJumpsAddress.value
            metadata["info"][
                "ExportAddressTableJumpsSize"
            ] = self.dotnet.clr_header.ExportAddressTableJumpsSize.value
            metadata["info"][
                "ManagedNativeHeaderAddress"
            ] = self.dotnet.clr_header.ManagedNativeHeaderAddress.value
            metadata["info"][
                "ManagedNativeHeaderSize"
            ] = self.dotnet.clr_header.ManagedNativeHeaderSize.value
        except Exception as e:
            self.log.error(f"Error getting more metadata/info clr header for {self.hash.sha256}: {e}")

        # Streams section
        try:
            metadata["Streams"] = {}
            stream_names = self.dotnet.get_stream_names()
            for name in stream_names:
                indx = stream_names.index(name)
                stream_header = self.dotnet.dotnet_stream_headers[indx]
                stream_address = self.dotnet.dotnet_streams[indx].address
                metadata["Streams"][name] = {}
                metadata["Streams"][name]["raw_name"] = base64.b64encode(
                    stream_header.Name.value
                ).decode()
                # metadata["Streams"][name]["raw_name"] = name
                metadata["Streams"][name]["size"] = stream_header.Size.value
                # Retrieve the stream data directly using the given address and size
                stream_data = self.pe.get_data(stream_address, stream_header.Size.value)
                metadata["Streams"][name]["entropy"] = (
                    "%.2f" % pefile.SectionStructure.entropy_H(self.pe, stream_data)
                )
                metadata["Streams"][name]["md5"] = md5(stream_data).hexdigest()
        except Exception as e:
            self.log.error(f"Error getting streams for {self.hash.sha256}: {e}")

        # ManifestResource
        try:
            metadata["ManifestResource"] = ()
            if "ManifestResource" in available_tables:
                metadata["info"]["HasManifestResource"] = True
                metadata["ManifestResource"] = (
                    self.dotnet.ManifestResource.get_resource_names()
                )
        except Exception as e:
            self.log.error(f"Error getting manifest resource for {self.hash.sha256}: {e}")

        # ExternalAssemblyRef
        try:
            metadata["ExternalAssemblyRef"] = {}
            if "AssemblyRef" in available_tables:
                metadata["ExternalAssemblyRef"][
                    "names"
                ] = self.dotnet.AssemblyRef.get_assemblyref_names()
                metadata["ExternalAssemblyRef"][
                    "cultures"
                ] = self.dotnet.AssemblyRef.get_assemblyref_cultures()
        except Exception as e:
            self.log.error(f"Error getting external assembly ref for {self.hash.sha256}: {e}")

        # AssemblyData
        try:
            metadata["AssemblyData"] = {}
            if "Assembly" in available_tables:
                metadata["AssemblyData"][
                    "name"
                ] = self.dotnet.Assembly.get_assembly_name()
                # It's officially a one-row table, but there are ITW files with more than one row.
                # It stores information about the current assembly. It is documented in ECMA-335.
                assembly_table = self.dotnet.metadata_tables_lookup[
                    "Assembly"
                ].table_rows[0]
                metadata["AssemblyData"][
                    "MajorVersion"
                ] = assembly_table.MajorVersion.value
                metadata["AssemblyData"][
                    "MinorVersion"
                ] = assembly_table.MinorVersion.value
                metadata["AssemblyData"]["hashalgid"] = assembly_table.HashAlgId.value
                metadata["AssemblyData"][
                    "BuildNumber"
                ] = assembly_table.BuildNumber.value
                metadata["AssemblyData"][
                    "RevisionNumber"
                ] = assembly_table.RevisionNumber.value
                metadata["AssemblyData"][
                    "culture"
                ] = self.dotnet.Assembly.get_assembly_culture()
        except Exception as e:
            self.log.error(f"Error getting assembly data for {self.hash.sha256}: {e}")

        # TypeDef handling
        try:
            metadata["TypeDef"] = {}
            if "TypeDef" in available_tables:
                metadata["info"]["HasTypeDef"] = True
                # Get basic type definitions
                try:
                    # Get all types (ANY visibility)
                    type_defs = self.dotnet.TypeDef.get_type_names()
                    metadata["TypeDef"]["names"] = type_defs if type_defs else []
                    
                    # Get detailed type information with methods
                    types_with_methods = self.dotnet.TypeDef.get_type_names_with_methods()
                    if types_with_methods:
                        metadata["TypeDef"]["detailed"] = []
                        for type_info in types_with_methods:
                            type_data = {
                                "type": type_info.Type,
                                "namespace": type_info.Namespace,
                                "flags": type_info.Flags,
                                "methods": []
                            }
                            for method in type_info.Methods:
                                method_data = {
                                    "name": method.Name,
                                    "flags": method.Flags
                                }
                                if method.Signature:
                                    method_data["signature"] = {
                                        "parameters": method.Signature.get("parameter", []),
                                        "return_type": method.Signature.get("return", ""),
                                        "has_this": method.Signature.get("hasthis", False)
                                    }
                                type_data["methods"].append(method_data)
                            metadata["TypeDef"]["detailed"].append(type_data)
                except AttributeError as e:
                    self.log.warning(f"TypeDef table exists but attributes missing for {self.hash.sha256}: {e}")
                    # metadata["info"]["TypeDefParsingError"] = f"Missing attributes: {str(e)}"
                except Exception as e:
                    self.log.error(f"Error parsing TypeDef table for {self.hash.sha256}: {e}")
                    # metadata["info"]["TypeDefParsingError"] = str(e)
        except Exception as e:
            self.log.error(f"Error handling TypeDef section for {self.hash.sha256}: {e}")
            metadata["TypeDef"] = {"names": [], "detailed": []}
            # metadata["info"]["TypeDefParsingError"] = str(e)

        # ExternalUnmanagedModules
        try:
            metadata["ExternalUnmanagedModules"] = ()
            if "ModuleRef" in available_tables:
                metadata["info"]["HasModuleRef"] = True
                metadata["ExternalUnmanagedModules"] = (
                    self.dotnet.ModuleRef.get_unmanaged_module_names(
                        self.dotnet.Type.UnmanagedModules.RAW
                    )
                )
        except Exception as e:
            self.log.error(f"Error getting external unmanaged modules for {self.hash.sha256}: {e}")

        # ExternalUnmanagedMethods
        try:
            metadata["ExternalUnmanagedMethods"] = ()
            if "ImplMap" in available_tables:
                metadata["info"]["HasImplMap"] = True
                metadata["ExternalUnmanagedMethods"] = (
                    self.dotnet.ImplMap.get_unmanaged_functions()
                )
        except Exception as e:
            self.log.error(f"Error getting external unmanaged methods for {self.hash.sha256}: {e}")

        # Event
        try:
            metadata["Event"] = ()
            if "Event" in available_tables:
                metadata["info"]["HasEvent"] = True
                metadata["Event"] = self.dotnet.Event.get_event_names()
        except Exception as e:
            self.log.error(f"Error getting event for {self.hash.sha256}: {e}")

        # Resources
        try:
            metadata["Resources"] = []
            if self.dotnet.has_resources():
                tmp_resources_list = []
                resource_data = self.dotnet.get_resources()
                for data in resource_data:
                    tmp_dict = {}
                    for resource_item in data.items():
                        if resource_item[0] == "SubResources":
                            if resource_item[1]:
                                tmp_dict["SubResources"] = {}
                                for sub_resource in resource_item[1]:
                                    for sub_resource_item in sub_resource.items():
                                        if sub_resource_item[0] == "Data":
                                            # Check if data is a sequence type that supports len()
                                            if hasattr(sub_resource_item[1], '__len__') and len(sub_resource_item[1]) > 100:
                                                tmp_dict["SubResources"]["Data"] = {}
                                                try:
                                                    # tmp_dict["SubResources"]["Data"][
                                                    #     "md5"
                                                    # ] = md5(
                                                    #     sub_resource_item[1].encode()
                                                    # ).hexdigest()
                                                    tmp_dict["SubResources"]["Data"][
                                                        "md5"
                                                    ] = self._compute_md5(
                                                        sub_resource_item[1]
                                                    )
                                                except Exception as e:
                                                    self.log.error(
                                                        f"Error in dotnet resources"
                                                        f" extraction {self.hash.sha256}: {e}"
                                                    )
                                                guess = magic.from_buffer(
                                                    sub_resource_item[1], mime=True
                                                )
                                                tmp_dict["SubResources"]["Data"][
                                                    "MimeType"
                                                ] = (guess if guess else None)
                                            else:
                                                normalized_data = self._normalize_data(
                                                    sub_resource_item[1].decode()
                                                    if isinstance(
                                                        sub_resource_item[1], bytes
                                                    )
                                                    else sub_resource_item[1]
                                                )
                                                tmp_dict["SubResources"][
                                                    sub_resource_item[0]
                                                ] = normalized_data
                                        else:
                                            tmp_dict["SubResources"][
                                                sub_resource_item[0]
                                            ] = (
                                                sub_resource_item[1].decode()
                                                if isinstance(
                                                    sub_resource_item[1], bytes
                                                )
                                                else sub_resource_item[1]
                                            )
                        elif resource_item[0] == "Data":
                            # Check if data is a sequence type that supports len()
                            if hasattr(resource_item[1], '__len__') and len(resource_item[1]) > 100:
                                tmp_dict["Data"] = {}
                                tmp_dict["Data"]["md5"] = self._compute_md5(
                                    resource_item[1]
                                )
                                guess = magic.from_buffer(resource_item[1], mime=True)
                                tmp_dict["Data"]["MimeType"] = guess if guess else None
                            else:
                                normalized_data = self._normalize_data(
                                    resource_item[1].decode()
                                    if isinstance(resource_item[1], bytes)
                                    else resource_item[1]
                                )
                                tmp_dict["Data"] = normalized_data
                        else:
                            tmp_dict[resource_item[0]] = (
                                resource_item[1].decode()
                                if isinstance(resource_item[1], bytes)
                                else resource_item[1]
                            )
                    tmp_resources_list.append(tmp_dict)
                metadata["Resources"] = tmp_resources_list
        except Exception as e:
            self.log.error(f"Error getting resources for {self.hash.sha256}: {e}")
            metadata["Resources"] = []  # Ensure we always have a valid list even on error

        dotnet = PEDotNet(metadata)
        self.dotnet = dotnet  # Store for later use in prepare_export_data
        return dotnet  # Return the extracted data instead of exporting directly


    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.dotnet
        elif exporter_type == "ClickHouseExporter":
            # Convert metadata to JSON string
            metadata_json = json.dumps(self.dotnet.dotnet)
            
            data = [[
                self.sha256,
                self.md5,
                self.sha1,
                metadata_json,
                datetime.now(timezone.utc)
            ]]
            
            column_names = [
                'sha256', 'md5', 'sha1', 'dotnet', 'analysis_date'
            ]
            
            if not data:
                return None

            column_type_names = [
                'String', 'String', 'String', 'JSON', 'DateTime64(3, \'UTC\')'
            ]

            return (data, column_names, column_type_names)

    def get_clickhouse_table(self) -> str:
        return "redb_pe_dotnet"