2024-01-04 17:27:47 +00:00
|
|
|
<!DOCTYPE html>
|
|
|
|
|
<html lang="en">
|
|
|
|
|
<head>
|
|
|
|
|
<meta charset="UTF-8">
|
|
|
|
|
<title>hyparquet parquet file parser</title>
|
|
|
|
|
<style>
|
2024-01-11 23:20:53 +00:00
|
|
|
* {
|
2024-01-04 17:27:47 +00:00
|
|
|
box-sizing: border-box;
|
2024-01-11 23:20:53 +00:00
|
|
|
margin: 0;
|
|
|
|
|
padding: 0;
|
|
|
|
|
}
|
|
|
|
|
body {
|
|
|
|
|
display: flex;
|
|
|
|
|
font-family: sans-serif;
|
|
|
|
|
height: 100vh;
|
|
|
|
|
}
|
|
|
|
|
nav {
|
|
|
|
|
width: 300px;
|
2024-01-04 17:27:47 +00:00
|
|
|
padding: 10px;
|
2024-01-11 23:20:53 +00:00
|
|
|
}
|
|
|
|
|
h1 {
|
|
|
|
|
font-size: 20pt;
|
|
|
|
|
}
|
|
|
|
|
h2 {
|
|
|
|
|
font-size: 12pt;
|
|
|
|
|
}
|
|
|
|
|
p {
|
|
|
|
|
margin: 10px 0;
|
|
|
|
|
}
|
|
|
|
|
label {
|
|
|
|
|
height: 100%;
|
2024-01-04 17:27:47 +00:00
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
font-size: 20px;
|
2024-01-11 23:20:53 +00:00
|
|
|
}
|
|
|
|
|
#dropzone {
|
|
|
|
|
border: 2px dashed #08e;
|
|
|
|
|
border-radius: 10px;
|
|
|
|
|
flex: 1;
|
|
|
|
|
margin: 10px;
|
|
|
|
|
padding: 10px;
|
|
|
|
|
color: #444;
|
|
|
|
|
overflow: auto;
|
2024-01-04 17:27:47 +00:00
|
|
|
}
|
|
|
|
|
.over {
|
|
|
|
|
background-color: lightblue;
|
|
|
|
|
}
|
2024-01-11 23:20:53 +00:00
|
|
|
.error {
|
|
|
|
|
color: #c11;
|
|
|
|
|
}
|
2024-01-04 17:27:47 +00:00
|
|
|
</style>
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
2024-01-11 23:20:53 +00:00
|
|
|
<nav>
|
|
|
|
|
<h1>hyparquet</h1>
|
|
|
|
|
<h2>parquet file parser</h2>
|
|
|
|
|
<p>
|
|
|
|
|
This is a simple online demo of the <a href="https://github.com/hyparam/hyparquet">hyparquet</a> parser for apache parquet files.
|
|
|
|
|
</p>
|
|
|
|
|
<p>
|
|
|
|
|
Drag and drop a parquet file onto the dropzone to see parquet file metadata.
|
|
|
|
|
</p>
|
|
|
|
|
<ul>
|
|
|
|
|
<li><a href="https://github.com/hyparam/hyparquet">github</a></li>
|
|
|
|
|
<li><a href="https://www.npmjs.com/package/hyparquet">npm</a></li>
|
|
|
|
|
</ul>
|
|
|
|
|
</nav>
|
|
|
|
|
<div id="dropzone">
|
|
|
|
|
<label>Drop .parquet file here</label>
|
|
|
|
|
</div>
|
|
|
|
|
|
2024-01-04 17:27:47 +00:00
|
|
|
<script type="module">
|
2024-01-05 09:39:59 +00:00
|
|
|
import { parquetMetadata, toJson } from './src/hyparquet.js'
|
2024-01-04 17:27:47 +00:00
|
|
|
|
2024-01-11 23:20:53 +00:00
|
|
|
dropzone.addEventListener('dragover', e => {
|
2024-01-04 17:27:47 +00:00
|
|
|
e.preventDefault()
|
|
|
|
|
e.dataTransfer.dropEffect = 'copy'
|
2024-01-11 23:20:53 +00:00
|
|
|
dropzone.classList.add('over')
|
2024-01-04 17:27:47 +00:00
|
|
|
})
|
|
|
|
|
|
2024-01-11 23:20:53 +00:00
|
|
|
dropzone.addEventListener('dragleave', () => {
|
|
|
|
|
dropzone.classList.remove('over')
|
2024-01-04 17:27:47 +00:00
|
|
|
})
|
|
|
|
|
|
2024-01-11 23:20:53 +00:00
|
|
|
dropzone.addEventListener('drop', e => {
|
2024-01-04 17:27:47 +00:00
|
|
|
e.preventDefault() // prevent dropped file from being "downloaded"
|
2024-01-11 23:20:53 +00:00
|
|
|
dropzone.classList.remove('over')
|
2024-01-04 17:27:47 +00:00
|
|
|
|
|
|
|
|
const files = e.dataTransfer.files
|
|
|
|
|
if (files.length > 0) {
|
|
|
|
|
const file = files[0]
|
|
|
|
|
const reader = new FileReader()
|
|
|
|
|
reader.onload = async (e) => {
|
2024-01-11 23:20:53 +00:00
|
|
|
try {
|
|
|
|
|
const arrayBuffer = e.target.result
|
|
|
|
|
const data = toJson(parquetMetadata(arrayBuffer))
|
|
|
|
|
// display metadata
|
|
|
|
|
dropzone.innerHTML = `<strong>${file.name}</strong><pre>${JSON.stringify(data, null, 2)}</pre>`
|
|
|
|
|
} catch (e) {
|
|
|
|
|
dropzone.innerHTML = `<strong>${file.name}</strong><div class="error">Error parsing file\n${e}</div>`
|
|
|
|
|
}
|
2024-01-04 17:27:47 +00:00
|
|
|
}
|
|
|
|
|
reader.onerror = e => {
|
|
|
|
|
console.error('Error reading file', e)
|
2024-01-11 23:20:53 +00:00
|
|
|
dropzone.innerText = `Error reading file\n${e.target.error}`
|
2024-01-04 17:27:47 +00:00
|
|
|
}
|
|
|
|
|
reader.readAsArrayBuffer(file)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
</script>
|
|
|
|
|
</body>
|
|
|
|
|
</html>
|